月に1回実行するこのスクリプトがあり、出力を電子メールに送信したいと考えています。
このように手動で実行すると、標準出力が電子メールに送信されます。
./monthly_mail.sh | mail -s "Mail purged" [email protected]
しかし、crontab
に次の行を追加すると、空白のメールが届きます。スクリプトのstdoutputがmail
にパイプされないのはなぜですか?
* * 2 * * /var/mail/monthly_mail.sh | /usr/bin/mail -s "Mail purged" [email protected]
試すべきことがいくつかあります。
正しいcrontab
の呪文
これをファイルに入れる場合は、/etc/crontab
cronジョブを実行するユーザーを指定する必要があります。したがって、ラインは次のようになります。
* * 2 * * root /var/mail/monthly_mail.sh | /usr/bin/mail -s "Mail purged" [email protected]
ここで、root
は、コマンドが実行されるユーザーです。必要に応じて変更してください。
Cron以外のテストメール
Crontabに移動する前に、最初にシェルからスタンドアロンでファイル/etc/crontab
からcronを実行する予定のユーザーとしてコマンドを実行できることを確認してください。
$ /var/mail/monthly_mail.sh |/usr/bin/mail -s "メールが削除されました" [email protected]
MAILTO
の出力を確認してください
Cronには通常、STDOUTまたはSTDERRですでに生成されている出力を取得するデフォルトのユーザーがあります。コマンドが実行されていない理由の手がかりとなる可能性のあるエラーメッセージがこのユーザーに電子メールで送信されていないかどうかを確認してください。この電子メールアドレスは通常、次のようにcronで構成されます。
[email protected]