cronジョブスケジューラは本当に正確ですか?
つまり、可能な限り最新のスクリプトを毎晩実行する必要がありますが、翌日の00:00の前に実行する必要があります。
理想的には23.59(または午後11:59)にcronジョブを実行しますが、システムは本当に正確ですか?秒が重要なので、cronジョブを23:58に設定して、しばらく残す必要がありますか?
cronジョブスケジューラは本当に正確ですか?
つまり、可能な限り最新のスクリプトを毎晩実行する必要がありますが、翌日の00:00の前に実行する必要があります。
理想的には23.59(または午後11:59)にcronジョブを実行しますが、システムは本当に正確ですか?秒が重要なので、cronジョブを23:58に設定して、しばらく残す必要がありますか?
回答:
cronが保証できるのは、指定された時間(システムクロックの精度に応じて)より早くジョブが開始されることです。ただし、ジョブの終了時間について保証する方法はありません。それは多くの要因に依存します:
私の推奨事項は、特定の完了時間が必須ではないように設計を変更することです。
O_CREAT
してO_EXCL
フラグを設定すると、ファイルがローカルファイルシステム上にある限りアトミックになります。
これはcronデーモンに依存すると思いますが、ドキュメントと標準では、分を指定すると、指定された分にジョブが実行されることが示されています。
見る:
時計が正しい時刻に達するとスクリプトが開始されますが、その後しばらくするとスクリプトが終了することに注意してください。
通常、cronは23:59:00に開始し、すべてのcrontabファイルをスキャンし、23:59に関連するファイルを除外してから開始します。このファイルのスキャンは非常に高速です。これは、ファイルの数が多くなく、すべてに数行しか含まれていないためです。だから、通常は、cronジョブを開始するに午後十一時59分00秒または夜11時59分01秒 、意図的にこのプロセスを遅くすることを確認の方法があります。(たとえば、crontabに数百万行を追加します)。システムが完全に過負荷の場合、これもそれほど速く動作しません。
また、これは明らかに実装依存です。
非常に正確な開始時刻が必要な場合は、希望する時刻までスリープしてから実行するプログラムを作成することをお勧めします(たとえば、c ++ 11を使用)。しかし、非リアルタイムOSでは、これも正確ではありません!また、PCの時計は正確な時間を知りません!
いずれの場合でも、これにより、プログラムが(多かれ少なかれ)希望する時間に確実に開始されます。プログラムが所定の時間まで正常に終了するという保証はないため、その要件に基づいて何かを変更する必要があると強く信じています。
これは、スクリプト全体の実行時間とサーバー時間の精度に依存します。
59 23 * * * /some/script/file.sh
は23:59に正確にスクリプトを起動しますが、長時間動作するコマンドがある場合、スクリプトの一部は真夜中以降に実行される場合があります。