
もしデビアン 7ホストされた VM で実行されているサーバー (wheezy) と最新のcron
デーモンにバグがあり、明らかな理由もなく cron の実行が停止しました。これはそれ以来一度しか発生していないため、デバッグが困難です。
cron が再度クラッシュした場合に自動的に再起動し、電子メールアラートを送信するようにするにはどうすればよいですか?
答え1
いつでもチェックできますモニタープロジェクト。
サービスを再起動して、それを維持することができます。
コメントで提案されているように cron を修正する方法がない場合は、
答え2
daemontools のようなものを実行してプロセスを監視および再起動することはできないでしょうか?
はい、確かに。いくつかのマシンでは、まさにそのようにしています。「daemontoolsのようなもの」は、実際にはノッシュパッケージしかし、デーモンツール ファミリーの他のメンバーは、GNU cron を監視するのに十分な能力を備えています。(Vixie cron は別の問題ですが、Debian とおっしゃいました。)
GNU cron は、daemontools ファミリーのサービス管理で実行する最もシンプルなサービスの 1 つです。Gerrit Pape の実行スクリプト コレクションには cron が含まれており、nosh ツールセットに付属するサービス バンドル コレクションにも含まれています。
とはいえ、GNU cronを再起動する必要があったことは一度もない。墜落したから。
興味深いことに、サービス管理は単に自動再起動だけではありません。またログ記録とリソース管理について、どちらも理由を診断するGNU cron がクラッシュしています。
問題の診断には次のようなことが含まれます。
- コア ダンプを有効にするために
run
使用するプログラムを編集します。softlimit
- スクリプト(または同等のもの)を編集する
restart
…- …デーモンがシグナルで終了したかどうかを確認します。
- …コアダンプを収集します。
- … アラートを発し、通知をメールで送信します。(クラッシュ/中止時
restart
に最後の数行をメールで送信するスクリプトを設定したことがあります。)log/main/current
- … 再起動レート制限を調整します。
- GNU cron の個別のログとサービス マネージャー自身のログを読み取り、デーモンがいつ、どのくらいの頻度で再起動したか、また、どのようなエラー メッセージ (ある場合) が出力されたかを判断します。
参考文献
- ジョナサン・デ・ボイン・ポラード(2015年)。デーモンツールファミリーよくある質問。
- ゲリット・パペ。Debian パッケージ
- https://unix.stackexchange.com/a/283132/5132
- https://unix.stackexchange.com/a/283580/5132
答え3
crond
経由で監視することはできないのでcrond
、次のようにします。
echo "while true; do if ! (ps aux |grep crond |grep -v grep); then /etc/init.d/crond start; fi && sleep 5; done &" >> /etc/rc.local
答え4
daemontools
、、などrunit
をインストールする必要はありません。supervise
これらのツールは便利ですが、cron のみでは一般的に必要のないユースケースをカバーしています。必要なものは init で簡単に処理できます。/etc/inittab に以下を追加します。
cron:2345:respawn:/usr/sbin/crond -n
crond
まず、オプションがサポートされていることを確認してください-n
。これにより、フォークせずにフォアグラウンドに留まるように指示されます。** rc スクリプトから crond を無効にしてください **。
/usr/lib/lsb/remove_initd /etc/init.d/crond
何らかの理由で crond が stdout または stderr に出力する場合、その出力を処理するラッパー スクリプトを作成し、ラッパー スクリプトを生成する必要があります。そのスクリプトはシンプルにしてください。
#!/bin/sh
#crond-wrapper.sh
exec crond -n &>>/var/log/crond
あるいは、既存のパッケージ化されたinit.d/crond
スクリプトを while ループ内で呼び出すスクリプトに変更することもできますcrond -n
。ただし、その場合は、このスクリプトで後で使用するために、スクリプトを巧みに保存する必要がありますpid
。