sh -c で実行したコマンドのログ出力方法
〜teeの優しく右手添え〜
sudo sh -c 'foo.sh >> log'
とした時、logに期待したログが書き出されなくて
困った経験はないですか?
私はあります。foo.sh
に
bash | |
---|---|
1 | echo 'This is log' >> log |
2 | echo 'That is log' >> log |
3 | echo 'I love log' >> log |
4 | # ... 処理が続く ... |
を記述してゴリ押しで乗り切っていました。スマートじゃないですね。
そこで、今回はスマートにログを出力する方法を書こうと思います。
tee
コマンドさんです。tee
コマンドさんマジかっけぇ...
tee
コマンドさんは受け取った結果をファイルに出力しつつ標準出力に吐き出してくれるコマンドです。
はい。 受け取った結果をファイルに出力します。
大事なことなので二回言いました。
では、tee
コマンドさんを使用してエレガントに書いてみましょう。
bash | |
---|---|
1 | sh -c 'foo.sh | tee -a log' |
ね?簡単でしょ?
なお、-a
オプションですが、こちらは指定したファイルに追記します。
もし、-a
オプションをつけなかったら、ログが毎回上書きされちゃうので、
過去のログがなくなっちゃいます。
それでは、最後にtee
コマンドさんを応用して、cronでも使用してみましょう!
bash | |
---|---|
1 | # (流派によっては、/etc/crontabや/etc/cron.d/以下のファイルを編集してください) |
2 | $ crontab -e |
3 |
|
4 | # 編集内容 |
5 | 15 * * * * sh -c 'cron-script.sh | tee -a log' |
おぉ…エレガントやん…