はむはむエンジニアぶろぐ

365日エンジニアリング

標準出力を利用した簡単なcronの死活監視

cronにjobを登録して実行するのは、簡単ですが死活監視の設計は難しいところです。
だれに?どのように? jobが失敗したことを伝えるか?
よくあるのは、メールとかですね。
最近は、Slackのようなチャットツールを使ってリアルタイムにpush通知したりします。

今回は、シェルの標準出力を利用したすぐに出来るメールによる死活監視をします。

環境構成

  • CentOS 6.5


下準備(シェルスクリプト)

/home/cron/test.sh というシェルスクリプト作成。

#!/bin/bash

# 終了ステータスが0以外なら強制終了
set -e

echo "実行失敗でゴザル"
echo "実行失敗でゴザル"
echo "実行失敗でゴザル"
echo "実行失敗でゴザル"
echo "実行失敗でゴザル"
ls /hoge

さいごに ls /hoge としているが、もちろんそんなディレクトリはない。


下準備(crontab)

crontabにjobを登録する。
とりあえず、毎分実行するjobを登録する。
放置したら大量のメールが届き続けることになるので注意!

MAILTO="メールを送りたいメールアドレス"
* * * * * /home/cron/test.sh 1 > /tmp/hoge.log | tail /tmp/hoge.log


毎分 /home/cron/test.sh を実行する。
実行されたjobが、ディスクリプタである 1 をつまり標準出力を返した際に、 /tmp/hoge.log に書き込む。
書き込まれた /tmp/hoge.logtail することで、標準出力を返し MAILTO に指定されたメールアドレスにメールが届くことになる。


実行してみる

100%失敗するスクリプトなので、直ぐにメールが来る。

実行失敗でゴザル
実行失敗でゴザル
実行失敗でゴザル
実行失敗でゴザル
実行失敗でゴザル
ls: cannot access /hoge: No such file or directory


こんなかんじに。
標準出力を利用した簡単なcronの死活監視でしたヽ(・∀・ )ノ

最近読んだ本

GNU Make 第3版

GNU Make 第3版

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

シェルプログラミング実用テクニック

シェルプログラミング実用テクニック