• 締切済み

CentOSでcronからphp mail送れない

こんにちは。 CentOSでcronの設定をしました。 */2 * * * * /usr/local/bin/php -f /usr/mail.php 1> /usr/log.txt 上記でmail.phpは2分置きに実行されていますが、 mail.php内のmb_send_mail関数がどうしても実行されません。 (ログよりmail.phpは実行されています。 print出力により確認) コマンドから直接 php /usr/mail.phpで実行するとメールは送信されます。 Centos 6.3 php 5.3.3 Cronでphpのmb_send_mailを実行する際には何か設定がいるのでしょうか。 アドバイス等ありましたら、よろしくお願いします。

みんなの回答

回答No.2

crontabの中で実行した場合と動作がことなったり、動かなかったりする場合は、環境変数の違いが原因のことが多いです。 rootで実行してるのでしたら(/usrの直下にファイルが書けてるのでたぶんそうですね?) cron内で * * * * * env > /root/env.txt とでもしてみて環境変数を確認してみてください。 環境変数はcrontabの中でも設定できますので、crontabの中でたとえばLANGを設定するのでしたら、 LANG=ja_JP.UTF-8 と直に書けば設定されます。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

/usr/local/binに配置したphpコマンドはどうインストールしたのだろうか。 たぶんコマンドから直接 php /usr/mail.php した時はCentOS6のmainパッケージの/usr/bin/phpが動いているんじゃないかと思う。 cronの設定と同じようにコマンドから直接 /usr/local/bin/php /usr/mail.php してみるとどうなるだろうか。 落ち着いて問題の切り分けを行おう。 mb_send_mail関数が失敗しているのか、mb_send_mailは成功しているがメール送信に失敗しているのか。 まずはmb_send_mail関数の返り値(bool)を確認。これがfalseならそこで失敗している。 Fatal error: Call to undefined function mb_send_mailなどと表示されたら/usr/local/bin/phpからmb_string拡張が参照できない状態になっている。 それとメールスプールに失敗メールが溜まっていないか確認すると良い。 CentOS6標準のPostfixを使っているのであれば postqueue -p で確認できる。

関連するQ&A