2012-10-17

cron で実行されたコマンドから出力されたメッセージをメールで送信する方法

本題に入る前に、まずは、sh/bash系のシェルで標準出力と標準エラー出力をリダイレクトする方法から。
現在使用中のシェルを確認するには、

# echo $SHELL

とすれば確認できる。

その他、利用できるシェルを確認するには

# cat /etc/shells

とする。


■リダイレクトについて
commandコマンドが出力を伴うコマンドの場合、commandコマンドの出力をresult.txtへ出力するには
# command > result.txt

コマンドの実効結果を別のコマンドの入力値とする場合は、|(パイプ)でつなげる。
# command1 | command2


■標準出力と標準エラー出力について
・標準出力
正常結果やコマンド実行途中に出力されるメッセージの出力先。

・標準エラー出力
異常終了時のメッセージやエラーメッセージなど、ユーザーに気づいてほしいメッセージの出力先。


■標準出力と標準エラー出力の両方をリダイレクトする
先のcommandコマンドのリダイレクト例のうち、result.txtへのリダイレクトは、標準出力をリダイレクトしている。そのため、標準エラー出力はリダイレクトされず、仮にcommandコマンドが標準エラー出力へメッセージを出力した場合は、result.txtではなくコンソールへ出力(表示)される。
標準出力と標準エラー出力の両方をリダイレクトして、result.txtへ出力するには、

# command > result.txt 2>&1

とする。

なお、上の例を省略なしで記述すると

# command 1> result.txt 2>&1

となる。

この「1」「2」の番号について。
・1:標準出力。通常はコンソール画面。
・2:標準エラー出力。通常はコンソール画面。
となっている。
ちなみに、「0」は「標準入力」。通常はキーボードからの入力。



例:標準エラー出力を error.log へ出力する。標準出力はコンソールへ表示する。
# command 2> error.log


例:標準出力は result.log 、標準エラー出力は error.log へ出力する
# command 1> result.log 2> error.log


ここまでは前置き。で、ここからが本題。


# 標準出力と標準エラー出力をメールで送信。cron実行アカウントのmailボックスへ送信される。
0 * * * * /usr/local/sbin/hoge.sh
5 2 * * * /usr/local/sbin/fuga.sh


# 標準出力と標準エラー出力をメールで送信。全てのcron実行結果が"hoge@example.dom"へ送信される。
MAILTO="hoge@example.dom"
0 * * * * /usr/local/sbin/hoge.sh
5 2 * * * /usr/local/sbin/fuga.sh


特定のバッチだけ違うメールへ送信する場合、2>&1 とすることで標準エラー出力もメールで送信できる。
# 標準出力と標準エラー出力をメールで送信。hoge.shの実行結果を"hoge@example.dom"へ送信し、fuga.shの実行結果をcron実行アカウントのmailボックスへ送信。
0 * * * * /usr/local/sbin/hoge.sh 2>&1 | mail hoge@example.dom
5 2 * * * /usr/local/sbin/fuga.sh




root以外のユーザーでcronを実行すると、通常はユーザーにメールが送信される。
これを知らずに放置しておくと、メールファイルがとんでもないことになる。

なので、こっちの記事も参考にどうぞ。

useradd で メールボックスファイルを作らない方法

http://chibitcpu.blogspot.jp/2014/04/useradd.html

0 件のコメント:

コメントを投稿

.htaccessで403を404で返す

久しぶりにリライトルールを書いたよ。 ドキュメントルートに.htaccessを置く場合の記述↓ # 403.html は実体がなくてよい。この設定をすることで、あっても使われなくなる。 ErrorDocument 403 /403.html # 独自の404ページをドキュメ...