今回は、ブラウザから実行すると特に問題のないPHPファイルをcronで実行すると、なぜかFatal errorが発生する原因と解決法を紹介する。

解決に至った手順

まずvim /var/log/cronでcronの実行ログを確認し、正しくcronジョブが実行されていることを確認する。

ただし、ここで実行されていることが確認できたとしても、エラーメッセージなどは表示されていないので、以下の記事を参考に外部ファイルにエラーログを出力させる。

エラーログを確認すると、以下のメッセージが出力されていた。

require_once(): Failed opening required

このエラー文についてググって調べてみると、PHPファイルに記述されているrequire_once内のファイルパスを相対パスにしていたことが原因のようだ。

つまり、cron実行時のカレントディレクトリが実行ファイルと別ディレクトリのため、相対パスではファイルを読み込めずエラーとなっていたのだ。

エラー解決法

このエラーは、cronでPHPを実行する前にプロジェクトディレクトリにcdコマンドで移動しておくことで解決する。

59 23 * * * cd /home/hoge/project && php main.php