エラーが起こった時にだけメール送信する cron とスクリプトの書きかた
標準エラーに出力する関数を作成すればいいのではないかと思って以下のような実装を書いてみました。シスログに記録する logger や組み込み変数 FUNCNAME を使うのはやりすぎかもしれません。(^_^; LOGとかの変数名はコーディングルールで決まっているのが前提です。
■crontab での設定
a b c d e /bar/foo.sh > /dev/null # 実行したいシェルスクリプト(標準出力は捨てる)
■シェルスクリプトで使用する汎用ライブラリ(functions)での設定
msg () { echo "$@" > $LOG } errmsg () { date > /dev/stderr hostname > /dev/stderr echo "$@" > /dev/stderr logger "$@" }
■実行したいシェルスクリプトでの正常/異常時の出力の切り替え
#!/bin/bash . functions MYSELF=`basename $0` LOG=$MYSELF.log EXIT_SUCCESS=0 EXIT_FAILURE=1 func_a () { command if [ $? -ne 0 ]; then errmsg "a error occured in $MYSELF: $FUNCNAME" # return some value or exit $EXIT_FAILURE fi } main () { func_a func_b }
■参考情報
http://mylinux.g.hatena.ne.jp/teraco/20081208/1228696758