Hatena::ブログ(Diary)

8tree にっき

2010-04-04

エラーが起こった時にだけメール送信する 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

n0tsn0ts 2010/04/07 11:31 cronlog というツールもあるので検討してはどうでしょうか?
http://github.com/kazuho/kaztools/blob/master/cronlog

kyagikyagi 2010/04/10 21:01 n0ts さん、コメントありがとうございます。検討してみます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kyagi/20100404/1270311514