web-dev-qa-db-ja.com

失敗したcronジョブの通知を取得する

Vanilla Ubuntu Desktop 12.04.1(Precise)では、cronジョブが無期限に無音で失敗する可能性があり、誰も気付かないことが心配です。システムcronジョブが出力を出力するか、単に失敗するたびに通知を受け取りたいです。

メールサーバー(例:postfix)をインストールし、ローカルのみの配信用に構成し、ルートのメールが通常のユーザーアカウントに配信されるようにエイリアスを設定し、ローカルクライアントのメールボックスをチェックするようにメールクライアントを構成できることを知っています。

Ubuntuでこのソリューションの軽量な代替手段はありますか?

4
Till Ulen

Cronjobコマンドのエラー出力をファイルにリダイレクトできます。 /etc/crontabの行の例を次に示します。

01 3    * * *   user    /bin/command 2>> /var/log/some.file

その後、少なくともエラーが発生した場合の手がかりを得ました。ファイルが変更されたときにnotify-osdまたは同様のツールで通知するスクリプトを作成することもできます。

編集:

ファイル/var/log/syslogは、cronからのメッセージも報告します。あなたはそれを見てみたいかもしれません。 cronデーモン専用のログファイルを取得するには、/etc/rsyslog.d/50-default.confを編集し、次の行をコメント解除または編集します。

#cron.*             /var/log/cron.log

そこに何が見つかるかわかりませんが、試してみる価値はあります。どうなったか報告してください。

3
con-f-use

「システムcronジョブが出力を出力するか、単に失敗するたびに通知を受け取りたい」

ある種のcron監視ツールを使用することをお勧めします。そこにはいくつかありますが、私は現在、Dead Man's Snitch( https://deadmanssnitch.com )を使用しています。 cronジョブがチェックインしない場合に警告が表示されます。あなたがやっているように、ジョブの後に一意のスニッチURLをカールして、URLをヒットします。 probyappのように他にもいくつかありますが、無料ではありません...幸運を祈ります。

1
James

Jenkinsは、この種のことにはかなり役立つツールです。私は人々がそれをCIと考える傾向があることを知っていますが、それは実際には単なるジョブ実行ツールです。ジョブの出力、実行時間、終了コードのステータスをキャプチャし、ジョブが失敗したかどうかを判断するために使用します。

Jenkinsがリモートマシンに接続するようにssh-agentをセットアップし、cronのように実行するようにジョブをスケジュールし、実行時間に基づいて(「3am」の代わりに)自動的にスペースを割り当て、依存関係をチェーンし、ジョブごとに出力のログをローテーションします失敗を通知するプラグインを介して、外部システム(Slack、Hipchatなど)の束と統合します。

前回これをセットアップしたとき、それは大きな助けになりました。どこに問題があるかすぐにわかり、複数の異なるシステムからcronを一元的に制御および追跡できました。

1
brightball

最新のUbuntuシステムで使用

journalctl -u cron.service -x

メールを送信せずにエラーを通知するには、これを試してください:

0 1,13 * * * /usr/bin/php /var/www/html/script.php > /tmp/script.log 2>&1 ; [ $? -ne 0 ] && notify-send -u critical -t 3000 "Cron script.php Failed in Execution" "Type journalctl -u cron.service -x to see more details"
0
abu_bua

cronwrap 1.4

web: https://pypi.org/project/cronwrap/

ジョブをラップし、エラー報告とコマンドタイムアウトを改善するcronジョブラッパー。

でインストール:

pip install cronwrap
0
abu_bua

私は次のようなことをしましたが、私のユースケースはスクリプトまたはcronで実行可能なセットです:

0 1,13 * * * /usr/bin/php /var/www/html/script.php > /tmp/script.log 2>&1 ; [ $? -ne 0 ] && mail -s "Cron Failure Report `date` " [email protected] <<< "Cron script.php Failed in Execution"

それが役に立てば幸い!

システム全体のアプリケーションの場合、DMSはオプションです。これ以外の方法を見つけた場合は、親切に更新してください。

0
Mustafa Mujahid