こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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);

投稿日時 - 2004-06-01 15:45:23

QNo.877515

困ってます

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

* * * * * /usr/local/lib/php -q /home/hoge/mail.php

こうすれば動くかもしれません。

投稿日時 - 2004-06-02 11:57:06

お礼

ありがとうございます。絶対パス指定で動きました。

コマンドラインでは、「php /home/hoge/mail.php」だけで動いてしまっていたので、省略してしまっても大丈夫だろう思い込んでしまったのが原因した。

しかし何故、コマンドラインで動くものが、cronで実行しても動作しないのかが、しっくり来ません。
理由をご存知でしたら、よろしくお願いします。

投稿日時 - 2004-06-02 12:38:36

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

なんてことはなく、PATHの設定が、コマンドラインとcronでは異なるからでしょう。

特にイリーガルなところに置いていたりすると、cron側ではPATHが通ってないことが多いので、cronに設定する場合は、絶対パスで書くようにした方が無難なのでは(?)と思っています。

間違いがありましたらご指摘ください。
ではでは☆

投稿日時 - 2004-06-02 13:38:52

お礼

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

ありがとうございました。

投稿日時 - 2004-06-02 14:55:36

ANo.4

気になったので・・・

cronで実行されるときに、phpと呼ぶだけで実行できているのでしょうか?
コマンドラインで
which php
とやって、絶対パスで指定してはどうでしょうか?

間違いがありましたらご指摘ください。
ではでは☆

投稿日時 - 2004-06-02 11:58:00

お礼

ありがとうございます。絶対パス指定で動きました。

コマンドラインでは、「php /home/hoge/mail.php」だけで動いてしまっていたので、省略してしまっても大丈夫だろう思い込んでしまったのが原因した。

しかし何故、コマンドラインで動くものが、cronで実行しても動作しないのかが、しっくり来ません。
理由をご存知でしたら、よろしくお願いします。

投稿日時 - 2004-06-02 12:39:39

ANo.2

パスを書いてないだけ…とか言う落ちではないですか?(^^;

#! /usr/local/bin/php //環境により変化
<?
mb_language("Ja");
………

?>
となっていますか?

投稿日時 - 2004-06-02 00:13:11

ANo.1

シェルシクリプトを使って、適当な権限を与えてみて下さい。

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

投稿日時 - 2004-06-01 16:04:41

補足

早速のお返事、ありがとうございます。以下のように変更してみましたが、相変わらず手動の場合のみ動作するようです。

[ crontab ]
* * * * * /home/hoge/mail.sh

[ mail.sh ]
#!/bin/sh

php /home/nisseykana/cron.php

シェルにはド素人なので、こうしたほうがいいとかありましたらご指摘お願いします。

投稿日時 - 2004-06-01 16:33:38

お礼

ありがとうございます。絶対パス指定で動きました。
下記のようにシェルスクリプトを使っても動作できることが確認できました。

[ crontab ]
* * * * * /usr/local/bin/php -q /home/hoge/mail.php

[ mail.php ]
mb_language("Ja");
(中略)
mb_send_mail($mailto,$subject,$content,$mailfrom);

投稿日時 - 2004-06-02 12:42:39

あなたにオススメの質問