簡體   English   中英

如何安排任務(無論何時schedule.rb)在每個備用星期六運行?

[英]how to schedule task (whenever schedule.rb) to run on every alternate Saturday?

計划任務已嘗試:

every '0 1 * * 6#2' do  
    rake 'prj:task1', output: 'log/task1.log'  
end  

觀察錯誤:

gems/whenever-0.10.0/lib/whenever/cron.rb:154:in `parse_as_string': Couldn't parse: 0 1 8-14 (ArgumentError)

首先看一下有關服務器故障的答案:

僅使用cron作業的相同問題

這應該輸入:

0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand

第一部分是每個星期六的上午8:00,第二部分可以在控制台上嘗試進行此測試:

test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even

該代碼執行的操作是獲取一年中的星期數,並獲取它是偶數還是奇數

如果我們將其翻譯為紅寶石

every '0 8 * * 6' do
  rake 'prj:task1', output: 'log/task1.log' 
end

並在任務中添加執行測試子句,以了解在這種情況下要測試的是星期幾

Time.now.strftime('%W').to_i
 => 15 
Time.now.strftime('%W').to_i % 2
 => 1 

然后嘗試根據自己的需要進行應用,因此僅在一年中的偶數或奇數周執行

if  Time.now.strftime('%W').to_i % 2 == 1
  puts "odd do something" 
else
  puts "even do not do anything"
end

我不確定是否可以將if修飾符直接添加到whenced操作中

every '0 8 * * 6' do
  if  Time.now.strftime('%W').to_i % 2 == 1
    rake 'prj:task1', output: 'log/task1.log' 
  end
end

另一種選擇可以在這里找到

最終答案可能如下所示:

every '30 1 * * 6' do
  (($(date +'%V')&1)) && rake 'prj:task1', output: 'log/task1.log' 
end

基本上每個星期六運行一次。 但是第一項檢查決定是否在偶數/奇數周上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM