ユーザーがスクリプトをいつ実行するかを選択するフォームがあります。私はfields {time,day of week, first/last}
. たとえば、ユーザーが次のように選択した場合: 毎月第 1 月曜日の午前 10 時 45 分 - これは、毎月第 1 月曜日にスクリプトを実行することを意味します。これを cron ジョブに変換するにはどうすればよいでしょうか。
ありがとう。
ユーザーがスクリプトをいつ実行するかを選択するフォームがあります。私はfields {time,day of week, first/last}
. たとえば、ユーザーが次のように選択した場合: 毎月第 1 月曜日の午前 10 時 45 分 - これは、毎月第 1 月曜日にスクリプトを実行することを意味します。これを cron ジョブに変換するにはどうすればよいでしょうか。
ありがとう。
残念ながら、crontab エントリの日付フィールドと曜日フィールドは、AND ではなく OR で結合されます。したがって、crontab フィールドだけで「月の最初の月曜日」を実行することはできません。追加のロジックが必要です。次のようなことができます。
min hr 1-7 * * [ `date +%w` -eq 1 ] && first-monday.sh
平日の最後のインスタンスを見つけるのは、その月の日数に依存するため、少しトリッキーです。
min hr 25-31 1,3,5,7,8,10,12 * [ `date +%w` -eq 5 ] && last-friday.sh
min hr 24-30 4,6,9,11 * [ `date +%w` -eq 5 ] && last-friday.sh
min hr 22-28 2 * [ `date +%w` -eq 5 ] && last-friday.sh
2 月 29 日が金曜日になる閏年では、最後のエントリは実際には代わりに 22 日にスクリプトを実行しますが、cron ジョブは年を指定できないため、可能な限り近い値になります。