• ベストアンサー

PHPの定期実行[ Linux&cron ]

Redhat9.0 PHP4.3.3を利用しています。 cronとコマンドライン版のPHPを利用して「1分毎に自分にメールを送る(実験用)」プログラムを実行させたいのですが、コマンドラインでは実行可能なのに、cronに登録してもメールが送られてきません。cronにはプログラムを実行したログが残っています。 完全に行き詰ってしまった。よろしくお願いします。 [ crontab ] * * * * * php /home/hoge/mail.php [ mail.php ] mb_language("Ja"); mb_internal_encoding("SJIS") ; $subject="test"; $content = "test"; $mailfrom="From:hoge@hoge.jp"; $mailto="***@hoge.com"; mb_send_mail($mailto,$subject,$content,$mailfrom);

質問者が選んだベストアンサー

  • ベストアンサー
noname#101981
noname#101981
回答No.3

* * * * * /usr/local/lib/php -q /home/hoge/mail.php こうすれば動くかもしれません。

Zodiac
質問者

お礼

ありがとうございます。絶対パス指定で動きました。 コマンドラインでは、「php /home/hoge/mail.php」だけで動いてしまっていたので、省略してしまっても大丈夫だろう思い込んでしまったのが原因した。 しかし何故、コマンドラインで動くものが、cronで実行しても動作しないのかが、しっくり来ません。 理由をご存知でしたら、よろしくお願いします。

その他の回答 (4)

noname#9414
noname#9414
回答No.5

なんてことはなく、PATHの設定が、コマンドラインとcronでは異なるからでしょう。 特にイリーガルなところに置いていたりすると、cron側ではPATHが通ってないことが多いので、cronに設定する場合は、絶対パスで書くようにした方が無難なのでは(?)と思っています。 間違いがありましたらご指摘ください。 ではでは☆

Zodiac
質問者

お礼

なるほど。いつもWindowsばかりなので、linuxの話になるとパニックになってしまいますねぇ。 冷静に考えてみりゃ、そりゃそうだと思うのですが。 ありがとうございました。

noname#9414
noname#9414
回答No.4

気になったので・・・ cronで実行されるときに、phpと呼ぶだけで実行できているのでしょうか? コマンドラインで which php とやって、絶対パスで指定してはどうでしょうか? 間違いがありましたらご指摘ください。 ではでは☆

Zodiac
質問者

お礼

ありがとうございます。絶対パス指定で動きました。 コマンドラインでは、「php /home/hoge/mail.php」だけで動いてしまっていたので、省略してしまっても大丈夫だろう思い込んでしまったのが原因した。 しかし何故、コマンドラインで動くものが、cronで実行しても動作しないのかが、しっくり来ません。 理由をご存知でしたら、よろしくお願いします。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

パスを書いてないだけ…とか言う落ちではないですか?(^^; #! /usr/local/bin/php //環境により変化 <? mb_language("Ja"); ……… ?> となっていますか?

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

シェルシクリプトを使って、適当な権限を与えてみて下さい。 絶対にこうだ。と言うことでは無いのですが、以前同じような経験をしたことがありまして、その時にはシェルスクリプトを噛ます事で対応できました。試してみた下さい。

Zodiac
質問者

お礼

ありがとうございます。絶対パス指定で動きました。 下記のようにシェルスクリプトを使っても動作できることが確認できました。 [ crontab ] * * * * * /usr/local/bin/php -q /home/hoge/mail.php [ mail.php ] mb_language("Ja"); (中略) mb_send_mail($mailto,$subject,$content,$mailfrom);

Zodiac
質問者

補足

早速のお返事、ありがとうございます。以下のように変更してみましたが、相変わらず手動の場合のみ動作するようです。 [ crontab ] * * * * * /home/hoge/mail.sh [ mail.sh ] #!/bin/sh php /home/nisseykana/cron.php シェルにはド素人なので、こうしたほうがいいとかありましたらご指摘お願いします。