crontabを以下のように設定しました。
0 0 * * * /usr/bin/php /home/test/public_html/update.php
しかし、実行されません。
(ファイルに直接アクセスした場合は、実行されます)
update.phpは更新用ファイルで、DB接続用の外部ファイルをincludeで読み込んでいるのが原因なのか?
と思い、1つのファイル上に更新用の記述を書いたところ、今度はcronで実行されました。
cronで実行させようと思った場合、includeやrequireなどの外部ファイル指定は適応されないのでしょうか?
もし出来ない場合、どうすればいいのでしょうか?
シェルスクリプトやCGI版として動作させる方法以外で対処法がありましたら、教えて下さい。
サーバはCentOS4.3です。
cronを実行しているユーザが読み取り権限の無いスクリプトを見ようとしていることはないですか?
includeやrequireの場合、パスが相対パスになっていて読めていないことがあります。
chdir(dirname(__FILE__))などを実行することでカレントディレクトリを固定してしまうなどの対策を取ることが出来ます。
とりあえず、ログを出力してcronが定時に動作しているかを確認すると良いと思われます。
(もちろんerror_reporting(E_ALL)などでエラーが表示されるようにして)
includeやrequireなどの外部ファイル指定は適応されないのでしょうか?
される。
PHP: コア php.ini ディレクティブに関する説明 - Manual
おそらくファイル指定を相対パスで指定しているのではないだろうか?
Web サーバーから実行される場合と CRON から実行される場合ではスクリプトから見たカレントディレクトリが違う。
フルパスで書けば動作するはず。
確かに相対パスの問題でして、dirnameで絶対パスを指定すると、実行されました。
回答ありがとうございました。