【问题标题】:how to schedule task (whenever schedule.rb) to run on every alternate Saturday?如何安排任务(无论何时 schedule.rb)在每个星期六运行?
【发布时间】:2023-03-09 08:18:01
【问题描述】:

尝试的计划任务:

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)

【问题讨论】:

    标签: ruby-on-rails ruby cron whenever


    【解决方案1】:

    另一个选项可以是found here

    最终的答案可能如下所示:

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

    这基本上每个星期六运行。但第一次检查决定是否在偶数/奇数周运行。

    【讨论】:

      【解决方案2】:

      首先看看这个关于服务器故障的答案:

      Same question using only cron job

      这应该是条目:

      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 修饰符直接添加到 when shcedule 是否有效

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

      【讨论】:

      • 错误:`parse_as_string':无法解析:0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 (ArgumentError)
      • 好吧,我在想,如果能处理这个问题,我就更新了
      猜你喜欢
      • 2011-03-15
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      相关资源
      最近更新 更多