私は偶然次の例を見つけました。
0 9 1-7 * 1 * First Monday of each month, at 9a.m.
1-7
毎月の日付になるべき部分は不明です。なぜ1-7
代わりに*
?3ヶ月ごとに0000ポイントで実行されるcronjobを作成する方法は?
0 0 1 */3 * *
上記の内容は正しいですか?
答え1
#* * * * * command to be executed
#- - - - -
#| | | | |
#| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
#| | | ------- Month (1 - 12)
#| | --------- Day of month (1 - 31)
#| ----------- Hour (0 - 23)
#------------- Minute (0 - 59)
あなたは正しいです。 5つのアスタリスクの後にはシェルコマンドが必要です。
を実行して、cronタブが実行されていることを確認できますtail -f /var/log/syslog | grep CRON
。テスト目的でn
数分間使用できます。
答え2
0 9 1-7 * *
ジョブは1日1回(9:00)実行されますが、毎月最初の7日間のみ実行されます。毎月最初の月曜日にタスクを実行する1つの方法は次のとおりです。最初の7日間はジョブを実行しますが、その日付が月曜日でない限り、何もしません。
0 9 1-7 * * if [ "$(date +%u)" = 1 ]; then do_stuff; fi
0 9 * 1 *
毎週月曜日にこのタスクを実行します。毎月最初の月曜日にタスクを実行する別の方法は次のとおりです。毎週月曜日にジョブを実行しますが、毎月の最初の7日以外に何もしないでください。
0 9 * * 1 if [ "$(date +%_d)" -le 7 ]; then do_stuff; fi
0 9 1-7 * 1 *
2つのアプローチを組み合わせる試みが失敗したようです。これは0 9 1-7 * 1
毎週月曜日に実行されます。そして毎月最初の7日ごと。
0 0 1 */3 *
(最後にもう1つ追加した場合*
)毎月1日の真夜中にジョブを実行しますが、その月が3の倍数の場合にのみ適用されます。これは実際に3ヶ月に1回行われます。
答え3
参考にしてください、」3ヶ月目「そして」3ヶ月に1回最初は、その年の最初の月から始まり、3ヶ月ごとを意味します。たとえば、2021-11-01 00:00:00を開始点にすると、次のようになります。
- 次回2021-04-01 00:00:00
- それでは2021-07-01 00:00:00
- それでは2021-10-01 00:00:00
- それでは2021-01-01 00:00:00
これを達成するには、構文が提案したとおりにする必要が0 0 1 */3 * *
あります。これを見てここ
もう一つは現在3ヶ月を考慮することだ。たとえば、2021-11-01 00:00:00を開始点として使用すると、次のようになります。
- 次回2022-02-01 00:00:00
- それでは2022-05-01 00:00:00
- それでは2022-8-01 00:00:00
- それでは2022-11-01 00:00:00
これを達成するために、構文は0 0 1 2-12/3 * *
提案したとおりです。これを見ればいいここ。
「数量」を計算する必要があることに注意してください。あなたが望む毎月そして、この数字からその年の最後の月(12月)まで始めます。前の例では、開始月は11月(11月)であり、次の3ヶ月を計算すると2番目の月(来年2月)になります。 。