2014年10月16日木曜日

Raspberry Piセットアップ日記(14)logger

logger:syslogにログを出力するコマンド。


シェルの標準出力を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}