休日(3 日間の週末の月曜日)に cron ジョブを実行しないための Cron のヒント

休日(3 日間の週末の月曜日)に cron ジョブを実行しないための Cron のヒント

当社には約 100 台のマシンがセットアップされており、各マシンはサービスの開始と停止、および 1 日の終わりにこれらのサービスのログ ファイルを集中リポジトリにアーカイブするなどの cron ジョブを実行しています。

我々が頭を悩ませているのは、3 日間の週末 (休日は休業) です。その日にサービスが起動して、ビジネス パートナーのマシンに接続することは避けたいのです。

現在、私たちは最も重要なジョブを手動でコメントアウトし、一日中大量のエラーが発生するようにしています。理想的ではありません。

基本的に、求人の日付フィールドに「1-5」が設定されている場合、これは「月曜日から金曜日」ではなく「就業日」を意味します。どの日が実際に「就業日」であるかを追跡するデータベースがあります。

では、Cron の日付一致アルゴリズムをオーバーライドすることは可能でしょうか、それとも月曜日の休日に起動しないように cron 設定を簡単に設定できる他の方法はあるのでしょうか?

ありがとう!

答え1

Cron はこのような決定をサポートしていません。非常に複雑になり、すぐに混乱してしまいます。ここカナダでは、休日は州間でさえ一貫していません。

休日データベースをチェックし、休日の場合は終了するランナー スクリプトを作成します。次のようなスクリプトを試してください。

#!/bin/bash

今日=$(日付 +%Y%m%d)
grep -q $TODAY /etc/holidays;の場合
   echo $* の休日をスキップします
   終了 0
フィ

$*

答え2

これを行う方法はいくつか考えられますが、最も実用的な解決策は、すべての cron ジョブの正確な設定によって異なります。たとえば、次のようになります。

スクリプトを使用して営業日データベースを照会できる場合は、次の日 (月曜日) が営業日であるかどうかを判断し、どこかのファイルを設定/クリアする cron ジョブを日曜日に実行できます。すべての cron ジョブはこのファイルの存在を確認し、それに応じて実行または終了を選択できます。

または

すべての個別の cron エントリを、(チェック可能な)データベースが営業日であると示している場合にのみ他のすべてのエントリを起動する 1 つのマスター ジョブに置き換えることができます。

関連情報