Linuxでコマンドの実行ログ(Cronも)をファイルに出力する方法

コマンドを実行した際にエラーが発生した時、何かと役に立つのがログです。
しかし、そもそもログに実行結果やエラー内容などを残しておかないと話にならないですよね。
今回は実行結果言い換えれば標準出力(以下、標準出力)エラー内容言い換えれば標準エラー出力(以下、標準エラー出力)をファイルとして残す方法をポストします。

標準出力と標準エラー出力をファイルに出力する例

例えば foo.sh を実行した時にその標準出力と標準エラー出力を出力するには、コマンドの後ろに1>> 標準出力ログファイルパス 2>> 標準エラー出力ログファイルパスを入力します。
コードで書くとこんな感じです。

~/foo.sh 1>> /var/log/exec.log 2>> /var/log/error.log

解説

1と2について

上記の1標準出力を意味します。
上記の2標準エラー出力を意味します。
上記の1>> /var/log/exec.logだと、/var/log/exec.logに実行結果である標準出力を追加すると言うことになります。
上記の2>> /var/log/error.logだと、/var/log/exec.logにエラー内容である標準エラー出力を追加すると言うことになります。

cronで使うには

このような標準出力標準エラー出力のログの保存は、プロンプトで直でコマンド実行する時よりはcronが実行された時の方が良く使われますね。当然下記のようにcronの時も上記全く同じシンタックスで使えます。

0 7 * * * ~/foo.sh 1>> /var/log/exec.log 2>> /var/log/error.log

標準出力標準エラー出力のログファイルを同じファイルにするには

一つにまとめてログファイルを保存にしたい場合は下記のようにします。

0 7 * * * ~/foo.sh >> /var/log/result.log 2>&1

注意

1> /var/log/exec.logのように>を一つだけにすると、上書き保存になってしまうので、追加して入れるには>>になるようにしてください。