cron で成功した時にメールを届かないようにする

公開日:
cron で成功時にメールが届かないように変更する方法

cron で命令が実行された時,自動でメールが届く設定になっていることがほとんどだと思います.
エラーの時にメールが届くのはウェルカムなのですが,成功時のメッセージなどは別に届かなくていいよ…って思ってしまいます.
今回はエラーメッセージ以外ではメールが届かないようにしていきます.

1. 標準出力を捨てる

そもも,メールが届いてしまう原因は標準出力が出てしまっているからなので,これを捨ててしまえば基本的には OK です.
つまり,hogeという命令をcronに書く時には以下のように標準出力を /dev/nullにリダイレクトしておきます.

hoge 1>/dev/null

1>は標準出力をリダイレクトするという意味で,標準エラー出力はそのまま表示されてエラーがある時にはメールが届くということになります.
これで,ほとんどの場合はメールが届かなくなると思います.
リダイレクトについて詳しくはこちらの記事などが参考になると思います.

2. curlではうまくいかない…?

curl(命令を含む) 命令を実行していた場合にはそれでも以下のようなメールが届いてしまうことがあると思います.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   305    0    29  100   276    256   2442 --:--:-- --:--:-- --:--:--  2699

標準出力は捨てているはずだし,手元で実行しても何も表示されないのに,cronで実行すると届いてしまうのはなぜだ…となって調べていると,curlではパイプなどでリダイレクトするとプログレスメータが標準エラー出力に表示されてしまうようで,これを消さないといけないということに気づきました.

そこで,curl命令を実行するところに -s or --silentオプションをつけてあげるとプログレスメータは表示されなくなりました.

curl -s https://hoge.hoge

他の命令でもプログレスメータが表示されてしまうことがあるかもしれないので,それぞれの命令を実行する時にオプションをつけてあげれば解決すると思います.

3. まとめ

cronで成功時にもメールが届いてしまう場合はとりあえず標準出力を /dev/nullにリダイレクトしてあげれば OK ですが,curlなどプログレスメータが表示されてしまう命令の場合には命令を実行する時にプログレスメータを表示しないようにオプションをつけてあげる必要がありそうです.

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA