シェルの標準出力をloggerに送るラッパーシェルを作ってみた。
cronで自動実行した際に、標準エラー出力に出力があったときだけメールされ、
通常時はログに吐くだけとなるようにしてみた。
・標準出力は、loggerに送る
・標準エラー出力は、loggerに送った上で、標準エラー出力にも冗長出力する
・コマンドライン
logger_wrapper.sh シェル シェル引数
標準出力と標準エラー出力のパイプを分けるやり方は
試行錯誤の結果名前付きパイプにしてみた。
mktempで一時ファイルを使ってもいいだろう。
#!/bin/bash
if [ $# -lt 1 ]; then
echo "argument not enough"
exit 8
fi
THIS_NAME=`basename $0 .sh`
EXEC_NAME=`basename $1`
LOGGER_OPTS="-t ${EXEC_NAME}"
# create named pipe
PIPE=${THIS_NAME}_$$.pipe
mkfifo ${PIPE}
# stderr logging (duplicate to stderr)
logger ${LOGGER_OPTS} -s -f ${PIPE} &
# execute program
$@ 2>${PIPE} | logger ${LOGGER_OPTS}
# cleanup
rm ${PIPE}
0 件のコメント:
コメントを投稿