特定の日付を除外する cron を作成するにはどうすればよいでしょうか。
たとえば、週末の午後 6 時から午後 9 時まで 30 分ごとに crontab を実行する必要があり、2014 年 5 月 10 日のみを除外したいとします。
それは可能ですか?これをどのように記述すればよいですか?または、これに代わる方法はありますか?提案してください。
答え1
標準の cron 構文は非常に単純で、除外をサポートしていません。場合によっては、そのようなロジックを実装するために複数の cron エントリのリストを作成することもできますが、これは面倒で理解や維持が困難になる傾向があります。ただし、このアプローチはあなたのケースには適用できません (特に標準の cron には暦年の概念がないため)。
cron コマンドを複雑にするのは良い計画ではありませんが、次のように比較的簡単な方法でこれを行うことができます。
0,30 18-20 * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
0 21 * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
(" 0,30 18-21
" を使用すると、タスクは 21:30 にも実行されます。21:00 にも実行したい場合は 2 行目が必要です。そうでない場合は省略します)
注:いくつかのcrontabパーセント記号はエスケープする必要があります (パーセント記号は、コマンドの標準入力にインライン データを詰め込むときに改行を示すために使用されます)。ただし、Dillon の cron ではそうではありません。
cronコマンドは実際にはシェルですコマンドリスト||
制御演算子は、短絡評価コマンドのリスト。リスト内のコマンドは、左から右へ 1 つずつ試行されますが、最初のコマンドが true を返すと実行が停止します。日付文字列の比較が true を返す場合 (1 日のみ true) はmycommand
実行されませんが、日付の比較が false を返す場合はmycommand
実行されます。
ただし、cron がプログラムを起動する方法は、さまざまな点で異なる可能性があることに注意してください。最も堅牢なアプローチは、ラッパー スクリプトを使用して条件付きロジックを実装することです。
答え2
X-Y
時間間隔と頻度に使用できます*/Z
。ここで、
X
間隔の開始です。Y
間隔の終わりです。Z
は単なる約数です(つまり、それぞれZ
)。
日付を除外するには、独自のスクリプトを作成します。このスクリプト内で日付をチェックし、次の命令を実行するかどうかを決定します。