
特定の日付を除外するクローンを作成するにはどうすればよいですか?
仮説:週末の午後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がプログラムを起動する方法はいくつかあります。最も信頼性の高い方法は、ラッパースクリプトを使用して条件付きロジックを実装することです。
答え2
X-Y
時間間隔と頻度を使用できます*/Z
。どこ:
X
間隔の始まりです。Y
間隔の終わりです。Z
単一の除数(例:それぞれZ
)。
特定の日付を除外するには、独自のスクリプトを作成するだけです。このスクリプトで日付を確認したら、次の手順を実行するかどうかを決定してください。