プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。

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を実行する際には何か設定がいるのでしょうか。


アドバイス等ありましたら、よろしくお願いします。

A 回答 (2件)

crontabの中で実行した場合と動作がことなったり、動かなかったりする場合は、環境変数の違いが原因のことが多いです。


rootで実行してるのでしたら(/usrの直下にファイルが書けてるのでたぶんそうですね?)
cron内で

* * * * * env > /root/env.txt

とでもしてみて環境変数を確認してみてください。
環境変数はcrontabの中でも設定できますので、crontabの中でたとえばLANGを設定するのでしたら、
LANG=ja_JP.UTF-8
と直に書けば設定されます。
    • good
    • 0

/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
で確認できる。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!