web-dev-qa-db-ja.com

crontabの出力を電子メールにリダイレクトする

見た目はシンプルですが、この種のcrontabの出力をメールにリダイレクトするにはどうすればよいですか?

00 06 * * * /usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /var/log/CRONLOGS/testing_prod.log 2>&1

[email protected]を追加しようとしましたが、結果はありません。

よろしく

3
Frida

そこにあるcronエントリは、STDOUTSTDERRの両方をファイルにリダイレクトしています:/var/log/CRONLOGS/testing_prod.log

必要なことを行う最も簡単な方法は、cronジョブの最後にmailxを実行し、間接指定を使用してそのファイルを送信することです。

00 06 * * * /usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /var/log/CRONLOGS/testing_prod.log 2>&1; mailx -s "Cron output" [email protected] < /var/log/CRONLOGS/testing_prod.log

ただし:cronジョブはログファイルにappendingであるため、古いエントリ(または回転)定期的に、以前のすべての出力と新しい出力を受け取ります。一時的なログに書き込む小さなシェルスクリプトを作成し、メールで送信して、メールログに追加することをお勧めします。

#!/bin/sh
/usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /tmp/testing_prod$$.log 2>&1
mailx -s "Cron output" [email protected] < /tmp/testing_prod$$.log
cat /tmp/testing_prod$$.log >> /var/log/CRONLOGS/testing_prod.log
rm /tmp/testing_prod$$.log

これには、crontabをより見栄えよくするという利点があります。

00 06 * * * /home/user/myapp/cronscript.sh
5
James O'Gorman