crontab 特定の日付のみを除外する

crontab 特定の日付のみを除外する

特定の日付を除外する 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)。

日付を除外するには、独自のスクリプトを作成します。このスクリプト内で日付をチェックし、次の命令を実行するかどうかを決定します。

関連情報