cron(crontab)の環境変数設定 メール送信先(MAILTO) PATH

CentOSにおいて、定期的にコマンドを実行するcronを使用する際、特に設定しない場合は、実行されたコマンドの出力が設定ユーザ宛にメールで送信される。

このコマンド実行結果の出力のメール送信先を変更したい場合はcrontabMAILTO環境変数をすればよい。

$ crontab -e
---------------------------------
MAILTO=user@example.com

*/5 * * * * /home/username/env.sh
---------------------------------

またcron実行環境(環境変数)は普通にユーザとしてログインした場合と違っているため、ログインして直接実行できてもcronを経由すると実行できないということがある。

例えば、cron実行環境では下記のような最低限のPATHが設定された状態のため、後からインストールした/usr/local/binにあるコマンドなど、PATHに含まれないコマンドはスクリプト内に記述しても実行できない。(もちろん、絶対PATHを指定したコマンドであれば実行される。)

PATH=/usr/bin:/bin

このように、cronでコマンドを実行できない理由がPATHにある場合はPATH環境変数をcrontabに設定すれば解決する。

$ crontab -e
---------------------------------
MAILTO=user@example.com
PATH=/usr/bin:/bin:/usr/local/bin

*/5 * * * * /home/username/env.sh
---------------------------------

ちなみに、実行するのがシェルスクリプトならばスクリプト内にPATHを書いても同様に解決する。スクリプト毎にPATHを書くのが面倒な場合はcrontabに書いてしまう方法がよいだろう。