たとえば、1時間ごとに実行されるcrontabジョブがあり、そのジョブを完了するのに1時間以上かかる場合は、次のジョブは実行されませんか?
答え1
いいえ、ある種のロックメカニズムを実装しないと、cronスクリプトは並列に実行されます。
バラより一度に1つのシェルスクリプトインスタンスのみを実行するための迅速で汚い方法 そして シェルスクリプトのロックは正しいですか?考えられる解決策を見つけてください。
より簡単な方法は、lockfile
次のように使用することです。回答
またはランワンパッケージ(参照:この回答) - ありがとうゲティフディックおすすめするからです。
答え2
しかもwhenjobs
その目標は「強力ながらシンプルなクローン代替品」。 ~からマンページ:
辞書機能
ジョブが実行される前に「pre」関数が呼び出されるようにスケジュールできます。関数は ("false" を返すことによって) ジョブを実行しないことを決定できます。
これを使用する方法の1つは、同じジョブのインスタンスがすでに実行されている場合に特定のジョブが実行されるのを防ぐことです。
job "only one"
pre (Whentools.one ())
every 10 seconds :
<<
# Takes longer than 10 seconds to run, but 'Whentools.one ()'
# will ensure only one is ever running.
sleep 11
>>
(また提供し、ジョブインスタンスの実行をWhentools.max n
許可しますn
。デフォルトではCronと同様に機能します。)