cron で require(): Failed opening required というエラーが出る

更新:

エラーが発生し、cronが実行されない原因について説明する。

エラーの原因

以下のようなcronのコマンドを書いたとする。

/usr/bin/php7.1 /home/username/example.com/public_html/test.php

例えば PHP であれば、実行するプログラム内で require() などで別のプログラムを読み込んでいる場合、No such file or directory などの警告が出る。 その場合、cd で実行するプログラムがあるディレクトリへ移動した後、プログラムを実行すればエラーが発生しない。 例えば、上記の例は以下のように書き直す。

cd /home/username/hoge/ ; /usr/bin/php ./test.php

cd で test.php がある /home/username/hoge/ へ移動した後、/usr/bin/php で test.php を実行している。 サーバーの設定によっては PHP のパスを書かなくても PHP を実行できるが、書いておいた方が無難。 私が使用しているさくらのレンタルサーバ(スタンダード)とエックスサーバー(X10)では、この書式で動作を確認済み。

具体的にはエックスサーバーは以下のとおり。

cd /home/ユーザー名/ドメイン名/public_html/(中略)/cron.phpがあるディレクトリ名/ ; /usr/bin/php7.1 ./cron.php

さくらのレンタルサーバは以下のとおり。 後半の 1> /dev/null はメールが来ないようにする指定。

cd /home/ユーザー名/www/(中略)/cron.phpがあるディレクトリ名/ ; /usr/local/bin/php ./cron.php 1> /dev/null

コアサーバー

コアサーバーはシェルスクリプトを実行する形で cron を登録する。 具体的には example.sh など適当なシェルを用意し、コントロールパネルにてシェルのパスを登録する。 具体的にシェルには以下のような PHP を実行するコマンドを書く。

#!/bin/sh
/usr/local/bin/php /virtual/ユーザー名/public_html/ドメイン名/(中略)/ファイル名.php

このシェルを実行するように以下のようなcronを登録する。 後半の >/dev/null 2>&1 はメールが来ないようにする指定。

/virtual/ユーザー名/public_html/ドメイン名/(中略)/cron.sh >/dev/null 2>&1

関連

cronの設定

このエントリーをはてなブックマークに追加