web-dev-qa-db-ja.com

cronのメール出力

月に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]
2
jaynp

試すべきことがいくつかあります。

  1. 正しいcrontabの呪文

    これをファイルに入れる場合は、/etc/crontabcronジョブを実行するユーザーを指定する必要があります。したがって、ラインは次のようになります。

    * * 2 * * root /var/mail/monthly_mail.sh | /usr/bin/mail -s "Mail purged" [email protected]
    

    ここで、rootは、コマンドが実行されるユーザーです。必要に応じて変更してください。

  2. Cron以外のテストメール

    Crontabに移動する前に、最初にシェルからスタンドアロンでファイル/etc/crontabからcronを実行する予定のユーザーとしてコマンドを実行できることを確認してください。

    $ /var/mail/monthly_mail.sh |/usr/bin/mail -s "メールが削除されました" [email protected]

  3. MAILTOの出力を確認してください

    Cronには通常、STDOUTまたはSTDERRですでに生成されている出力を取得するデフォルトのユーザーがあります。コマンドが実行されていない理由の手がかりとなる可能性のあるエラーメッセージがこのユーザーに電子メールで送信されていないかどうかを確認してください。この電子メールアドレスは通常、次のようにcronで構成されます。

    [email protected]
    
2
slm