crontabがすべての要件を満たしていない

crontabがすべての要件を満たしていない

これは基本的に毎年4月1日に実行したいが、4月1日が木曜日の場合にのみ実行したいcrontabエントリです。

0 13 1 4 4 /path/to/my/script.sh

ところがこれが毎週進行されているようです。私は何を見逃していますか?

答え1

crontabエントリの問題は次のとおりです。すでに指摘ただし、予想日時でスクリプトを実行するには、タスクのスケジュールを次のように変更します。

0 13 1 4 * [ "$(date +\%u)" -eq 4 ] && /path/to/my/script.sh

答え2

man -s 5 crontab説明する:

注:コマンドが実行される日付は、日付と曜日の2つのフィールドで指定できます。両方のフィールドが制限されている場合(つまり*ではありません)、両方のフィールドの1つが現在の時刻と一致するときにコマンドが実行されます。

今日の仕様は両方である1st dayためThursday、両方で実行されます(ただし、2021年のように最初の日が木曜日の場合は2回実行されません)。

一般的な解決策は、最初の日にcrontabを実行し、スクリプトがコマンドを使用してdate曜日を確認し、木曜日以外の前に終了するようにすることです。

7年に一度だけ実行されるスクリプトの場合、これは多くの問題のようです。

関連情報