16

驚異的な目的のために、5分ごとに実行される2分のオフセットでジョブをスケジュールしようとしています。つまり、1 つのジョブを 1,6,11,16.. で実行し、もう 1 つのジョブを 2,7,12,17... で実行したいということです。

これを行う例が見つかりませんでした。だから私は試しました:

every 5.minutes, :at=> 1 do
 command "echo 'you can use raw cron sytax too'"
end 

これは機能しているように見えますが、すべての ':at' の例は文字列形式の時間を期待しているようです。上記は有効ですか、それともたまたま機能するだけで、すべてのオプションは実際には開始時間をサポートしていません。

4

3 に答える 3

19

2 つのジョブの間に依存関係があるように思われるので、これを処理するには 2 つの方法があると思います。質問が示唆するように、1、6、11、16 などで実行する場合は、生の cron 構文を使用するだけです。

every '0,5,10,15,20,25,30,35,40,45,50,55 * * * *' do
  command "echo 'you can use raw cron syntax one'"
end

every '1,6,11,16,21,26,31,36,41,46,51,56 * * * *' do
  command "echo 'you can use raw cron syntax two'"
end

ただし、最初のジョブが完了したら、2 番目のジョブを実行することをお勧めします。これにより、ジョブが重複せず、最初のジョブが完了した後にのみ 2 番目のジョブが実行されるようになります。

every 5.minutes do
  command "echo 'one' && echo 'two'"
end
于 2011-06-10T20:32:04.790 に答える
11

every整数を期待します。

激しい群れの問題を回避するために、これを行うことができます。

every 5.minutes - 10.seconds do
  command "echo first task"
end

every 5.minutes + 10.seconds do
  command "echo second task"
end

オフセットもランダム化できます

def some_seconds
  (-10..10).to_a.sample.seconds
end

every 5.minutes + some_seconds do
  command "echo first task"
end

every 5.minutes + some_seconds do
  command "echo second task"
end

他の回答と同様に、これは互いに依存するタスクでは機能しません。タスクが相互に依存している場合は、 を使用rakeして処理するか、次のタスクをタスクで手動で実行する必要があります。

# shedule.rb
every 5.minutes do
  rake 'jobs:last_one'
end

# Rakefile.rb
namespace :jobs do
  task :first_one do
    sh 'first command'
  end

  task second_one: [:first_one] do
    sh 'second_command that_should_run_after_first_one'
  end

  task last_one: [:second_one] do
    sh 'last_command that_should_run_after_all_commands'
  end
end
于 2014-08-21T04:40:11.393 に答える