cronは、予約するインスタンスがすでに実行されていることを知っていますか?

cronは、予約するインスタンスがすでに実行されていることを知っていますか?

たとえば、5分ごとに実行するようにcrontabにジョブを追加しましたが、実際に5分以内にジョブが完了しないことを知りたいと思います。 cronデーモンは、以前のインスタンスがすでに実行されていることを知っており、次の実行をスキップしますか?それともプロセスにロジックを構築する必要がありますか?どのように?

答え1

いいえ、cronとの契約は、指定された時間に各タスクを開始することです。 Cronは、どの連続タスクが「同じタスク」であるかを追跡しません。

以前のジョブが完了していない状態でジョブを開始したくない場合は、ジョブの先頭に何かを入れてジョブを早期に終了させる必要があります。たとえば、ロックされたファイルを保存してロックされたファイルを開くことができない場合は、ジョブを終了するようにスケジュールできます。

* * * * flock -n /var/lock/myjob.lock /path/to/script

答え2

いいえ、そうではありません。

あなたができることは、タスクを含むスクリプトを実行するようにcronを設定し、特定の時間に実行するように設定することです。各時間間隔の前に、このスクリプトでジョブを終了/終了し、cronに次の時間間隔で再起動するようにします。

答え3

https://www.timkay.com/solo/solo

...これにより、プログラムが一度に複数のコピーを実行するのを防ぐことができます。 cronを使用すると、以前のジョブが完了するまでジョブは実行されません。 (文書:https://www.timkay.com/solo/)

はい

* * * * * solo -port=3801 ./jobA.sh blah blah

jobA.shが1分以上かかると、cronは再びsoloを呼び出しますが、ポート3801を使用したため、soloはエラーを返し、jobA.shは実行されません。

関連情報