Linuxでsendmailを含んだシェルスクリプトがターミナルのコマンドでは動作するのにcronで動作しなかった時の対処法の備忘録です。
次のような書式でシェルを書いた後、cronに定時実行するように書き込みました。すると、コマンド上では正常動作しメールが送信されましたが、cronに書き込んだ定時になってもメールが送信されませんでした。
mail.sh
#!/bin/sh
{
echo "From: <****@gmail.com> "
echo "To: <****@gmail.com> "
echo "Subject: タイトル"
echo "Content-Type: text/plain;charset='UTF-8'"
echo "Content-Transfer-Encoding: base64"
}| sendmail -i -t
そこで、まずcronに問題があるのかと疑い、ファイル権限をchmod 777にした後、ログを確認してみましたがcronは問題なく動作しているようでした。
$ tail /var/log/cron
Aug 7 14:20:01 ip-***-**-*-** CROND[17995]: (root) CMD (/home/***/mail.sh)
問題はsendmailにあるらしいことが断定できたので調べ回ったところ、/usr/sbin/をつけたら問題なく動作しメールが送信され、gmail上では迷惑メールフォルダに受信できていました。
mail.sh
#!/bin/sh
{
echo "From: <****@gmail.com> "
echo "To: <****@gmail.com> "
echo "Subject: タイトル"
echo "Content-Type: text/plain;charset='UTF-8'"
echo "Content-Transfer-Encoding: base64"
}| /usr/sbin/sendmail -i -t