cron で命令が実行された時,自動でメールが届く設定になっていることがほとんどだと思います.
エラーの時にメールが届くのはウェルカムなのですが,成功時のメッセージなどは別に届かなくていいよ…って思ってしまいます.
今回はエラーメッセージ以外ではメールが届かないようにしていきます.
1. 標準出力を捨てる
そもも,メールが届いてしまう原因は標準出力が出てしまっているからなので,これを捨ててしまえば基本的には OK です.
つまり,hogeという命令をcronに書く時には以下のように標準出力を /dev/nullにリダイレクトしておきます.
hoge 1>/dev/null1>は標準出力をリダイレクトするという意味で,標準エラー出力はそのまま表示されてエラーがある時にはメールが届くということになります.
これで,ほとんどの場合はメールが届かなくなると思います.
リダイレクトについて詳しくはこちらの記事などが参考になると思います.
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などプログレスメータが表示されてしまう命令の場合には命令を実行する時にプログレスメータを表示しないようにオプションをつけてあげる必要がありそうです.