これは基本的に毎年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年に一度だけ実行されるスクリプトの場合、これは多くの問題のようです。