crontabは特定の日付のみを除外します

crontabは特定の日付のみを除外します

特定の日付を除外するクローンを作成するにはどうすればよいですか?

仮説:週末の午後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 行目が必要です。

注: にいくつかのクローンタブDillonのcronではそうではありませんが、パーセント記号(コマンドの標準入力にインラインデータを埋めるときに改行を表すために使用されます)をエスケープする必要があります。

cronコマンドは実際にはシェルですコマンドリスト||制御演算子は以下を提供します。段落評価注文する。リスト内のコマンドは左から右に一度に 1 つずつ試行されますが、最初のコマンドが true を返すと実行は停止します。日付文字列比較がtrue(1日間のみtrue)を返すと実行されず、mycommand日付比較がfalseを返すと実行されますmycommand

しかし、cronがプログラムを起動する方法はいくつかあります。最も信頼性の高い方法は、ラッパースクリプトを使用して条件付きロジックを実装することです。

おすすめ記事