cron
一年中一日に数回実行されるスクリプトがあります。しかし、クリスマスには状況が変わらなければなりません。したがって、私のスクリプトは基本的に次のようになります。
# m h dom mon dow command
26 16 * JAN-NOV MON-THU (echo 14 `date`) >> /var/log/cron.www-data 2>&1
26 16 1-18 DEC MON-THU (echo 6 `date`) >> /var/log/cron.www-data 2>&1
echo
デバッグ/デモの目的で、実際のコマンドを単純なコマンドに置き換えました。特別なケースでは、次のようなタスクを追加しました。
26 07 19-24 DEC ? (echo 1 `date` ) >> /var/log/cron.www-data 2>&1
実際にはかなりうまくいきます。
問題は、上記の2行目()がecho 6
12月19日に今日すぐに実行されたことです。ログファイルには次のように表示されます。
6 Tue Dec 19 16:00:01 CET 2017
私の質問は簡単だと思います。このタスクが実行されるのはなぜですか??
私はRaspberry PiでLinux 3.18.11-v7+#781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU / Linuxを実行しています。
ベストアンサー1
理由は次のとおりですcrontab(5)
。
分、時、月のフィールドが現在の時刻と一致すると、cron(8)によってコマンドが実行されます。2つの日付フィールド(日または曜日)のうちの1つ以上が現在の時刻と一致する場合。
(ハイライトが追加されました)
私はスクリプトが12月1日から18日までの指定された時間、つまり月曜日から木曜日まで実行されることを望んでいると思います。マニュアルページに示すように、cron
日付と曜日を指定してもこの機能は機能しません。あなたのコマンドは12月1日から18日まで毎日実行されます。そして12月月曜日から木曜日までの曜日。 2017年12月19日は火曜日なので、スクリプトが実行されます。
メモ:上記はDebianシステムのデフォルト値であるISC cronに適用されます。