午後11時(EST)から午前6時(EST)まで毎分実行する必要があるPythonプログラムがあります。このためにクローンジョブをどのように予約できますか?
* 23-6 * * 1-5 python my_program.py
これはうまくいくでしょうか?それとも、このために2つの別々のクローンジョブを作成する必要がありますか?
答え1
このようなラップアラウンドの範囲はあいまいです。むしろ時間を指定23,0-6
し、将来の問題を避けてください。
Cron は、1 分ごとに crontab ファイルの内容を確認し、時間と条件が一致すると、その行に表示されるスクリプトを実行します。
この状況では、次の一連の偶然が一致する必要があります。
- 午後11時~午後11時59分、午前0時~午前6時59分
- 月曜日から金曜日まで
したがって、これらの偶然の集合が成立するのは、毎瞬間に働く。
そこにいると期待しないでください。時間と曜日の範囲例えば見せてください。土曜日。
答え2
cron
特にUnix / Linuxシステムにはいくつかの実装があるため、提供したタイムラインは不明です。真夜中にラップアラウンドを満たすには、2つの範囲を指定することをお勧めします。真夜中以降の時間範囲を持つcrontabエントリAT&T/BSDcron
実装では範囲リストを処理できません。
しかし、おそらくもっと重要なのは、定義が2300(午後11時)から0659(午前6時59分)まで毎分プログラムを実行することです。これは必要以上に1時間遅くなります。また、月曜日から金曜日までのみ実行されます(1-5
)。月曜日の午後11時に起動してスクリプトを実行し、土曜日の午前6時に停止するには、次の項目が必要です。
* 23 * * 1-5 python my_program.py # 11pm-midnight Mon-Fri
* 0-5 * * 2-6 python my_program.py # midnight-5.59am Tue-Sat
0 6 * * 2-6 python my_program.py # 6am Tue-Sat
最後に、通常はシステムのデフォルトのタイムゾーンを使用して実行することに注意してください。cron
これは必ずしもインタラクティブに使用する時間帯である必要はありません。午後11時から午前6時までがcron
午後11時から午前6時までの考えと一致することを確認するには、少しテストが必要になる場合があります。
答え3
これでジョブが実行されます。毎瞬間週1~5日午後11時~午前6時59分。
ここでは、1 ==>月曜日、5 ==>金曜日です。
しかし、cronはすべての条件が正しいことを確認し、土曜日はその曜日に含まれていないため、金曜日の深夜12時に停止します。先日は皆うまくいきます。
答え4
この bash スクリプトを /etc/opt/ranger.sh に保存します。
currenttime=$(date +%H:%M)
if [[ "$currenttime" > "23:00" ]] || [[ "$currenttime" < "06:00" ]]; then
run my Python script
fi
次に、次のcronjobエントリを追加します。
* * * * * /etc/opt/ranger.sh