エックスサーバー(Xserver)には、サーバー上のPHPファイル等のプログラムを、Cron を利用して自動的に実行させる機能が提供されています。
Cronとは?
Cron(クーロン or クローン)とは、指定時間に指定コマンド(プログラム)を自動的に実行させるサーバーの機能です。定期的なメールの送信や、ブログのRSS取得などにもよく使用されています。
エックスサーバーの「サーバーパネル」にログイン後、「Cron設定」より設定の確認や追加を行うことが出来ます。
▼現在設定されているCronを確認したり、新規追加が可能です。
「Cron設定追加」にて、実行時間とコマンドを設定することで、自由な年月日・時間・頻度で、特定のプログラムを自動的に動作させることが可能となります。
しかし、ここの『コマンド』を正しく記述できていない場合、プログラムは正常に動作しません。
"上手く設定できていると思うのに、どうしても思い通りに動作しない!" という方も多いと思います。
そこで今回は、エックスサーバーにおけるCron設定時に、phpファイルが上手く実行されない(動作しない)エラーが発生した場合の確認事項をまとめて紹介していきます。
エックスサーバーにおけるCronコマンド記述方法
エックスサーバーでは、コマンド欄に以下のようなコードを記述することで、phpファイルを実行することが出来ます。
(例)abc.phpをPHP 7.2 で実行する場合
/usr/bin/php7.2 /home/サーバーID/独自ドメイン名/public_html/abc.php
Cronによるphpファイルの実行でエラーが生じる場合、このコマンドに不正な記述が含まれている可能性が高いです。
phpが動かない場合に確認すべき事項
phpファイルが上手く動かない場合、以下に挙げる点を確認してみてください。
確認点①:phpファイルの権限を変更する
Cronで実行したいphpファイルの権限が "604" などの実行権を与えられていないパーミッションになっている場合、ファイルが正常に実行されない可能性が高いです。
そのため、phpファイルを "755" など、実行権のあるパーミッションに変更してあげる必要があります。
エックスサーバーの「ファイルマネージャー」にログインし、実行したいphpファイルが保存されている場所を開いてください。
▼ファイルごとの権限を確認することが出来ます。
そして実行したいphpファイルを選択した状態で、メニューバーより『パーミッション変更』を選択します。
するとパーミッション変更画面が出現するので、"パーミッションを数値で指定する" 内の数値を "755" に変更してください。
あとは「変更」をクリックすることでパーミッションが変更され、phpファイルに実行権限を付与することが出来ます!
確認点②:PHPバージョン指定は正確か?
/usr/bin/php7.2 /home/サーバーID/独自ドメイン名/public_html/abc.php
phpファイルを実行する場合、コマンド上部(赤字部分)にて、現在サーバーで利用しているPHPのバージョンを指定する必要があります。
エックスサーバーでは、「サーバーパネル」の「PHP Ver.切替」よりバージョンが確認できます。
ここで現在使用されているPHPバージョンの数値を、コマンドに記載しましょう。
ここで注意しなければならないのは、PHPバージョンの記載は 上2ケタのみ であるという点です。
- 誤った記載例:/usr/bin/php7.4.13 /home/...
- 正しい記載例:/usr/bin/php7.4 /home/...
末尾の3ケタ目まで律義に記載していると、エラーが生じてphpファイルが動作しません。
また、phpバージョン記述の直後は、忘れずに半角スペースを開けてください。
- 誤った記載例:/usr/bin/php7.4/home/...
- 正しい記載例:/usr/bin/php7.4 /home/...
半角スペースを空けない場合も、同様にエラーが生じてphpファイルが動作しません。
確認点③:phpが「CLI版」or「CGI版」かを確認する
phpには、主に「CLI版」と「CGI版」の2種類が存在しています。
2つの違いの説明はここでは省きますが、Cronコマンドでは「CLI版」と「CGI版」のいずれかによって、記述方法が異なります。
「サーバーパネル」の「サーバー情報」より「コマンドパス一覧」タブを開くと、各phpバージョンごとの記述方法を確認することが出来ます。
上画像の通り、エックスサーバーでは「CGI版」のPHPを利用している場合に、コマンド内のphpバージョン記述の末尾に『-cgi』、もしくは接頭に『-fcgi』を付ける必要があります。
- 「CLI版」を利用している場合の記述例:/usr/bin/php7.4 /home/...
- 「CGI版」を利用している場合の記述例:/usr/bin/php7.4-cgi /home/...
ちなみにエックスサーバーでは、以前の高速化に伴うアップデートにより、いずれのバージョンにおいても『CGI版』が標準で有効となりました。
そのため、エックスサーバーでCronコマンドを実行する場合、phpバージョンの末尾に『-cgi』を付けることを忘れないようにしてください。
確認点④:サーバーIDは合っているか?
/usr/bin/php7.2 /home/サーバーID/独自ドメイン名/public_html/abc.php
Cronコマンド内の赤字部分において、エックスサーバーにおいて使用している『サーバーID』を記述する必要があります。
間違えて「サーバー番号」を記述してしまう方も多いので注意してください。
『サーバーID』は、エックスサーバーの「アカウント画面」より確認することが出来ます。
確認点⑤:『/public_html』は必ず記述する
/usr/bin/php7.2 /home/サーバーID/独自ドメイン名/public_html/abc.php
Cronコマンドにおいて、独自ドメイン以降とphpファイルまでのパスの合間に『/public_html』を記述する必要はあります。
ブラウザ上では『/public_html』の記述無しで目的のphpファイルを開くことが出来るため、不要だと思って記述しない(削除する)方が少なからずいます。
実際、『/public_html』の記述が無くても実行に成功する例は稀にあります。
しかし、もし常時安定した動作を実現したいのであれば、『/public_html』は必ず記述するようにしてください。
確認点⑥:ファイル名や、ファイルに至るまでのパスに間違いは無いか?
/usr/bin/php7.2 /home/サーバーID/独自ドメイン名/public_html/abc.php
最後に、最も基本的な点で重要な点が、「phpファイル名」や「パス(フォルダ保存先に至るまでの記述)」の 記述ミス です。
上述した①~④を確認してもなお実行できない場合は、そもそもphpファイル内に記載ミスがあるか、コマンド内において「phpファイル名」や「パス」の指定ミスが含まれている可能性が高いです。
念のため、ドメイン名も間違っていないか確認した方が良いでしょう(例えば本サイトの場合、『fukafuka295.jp』がドメイン名にあたります)
"絶対に合っている" といった先入観は捨てて、再度キチンと確認してみてください。
通知アドレスの登録を推奨
以上が、エックスサーバーでCronによるphp動作が上手くいかない場合に、確認すべき6つの事項です。
「phpファイルの内容自体に記載ミスがある」といった場合を除けば、上記5項目を確認することで、問題なくphpファイルを動作させることが出来ると思います。
なお、エックスサーバーの「Cron設定」よりメールアドレスを登録しておくことで、Cronの実行結果を通知してもらえるようになります。
▼上手く実行できた場合、Cron Daemonよりphpファイルに到達できた旨が通知されます。
▼上手く実行できなかった場合、エラー内容が届きます。
どのような原因でエラーが発生しているかを確認できるため、初実行時にはメールアドレスを登録しておくと良いでしょう。
Cron自体が非常に便利な機能であり、応用次第で非常に幅広い使い道があります。
ぜひ上手く活用して、自身のサービスを充実させていきましょう!
▼こちらの記事もオススメ!
-
サーバー上のプログラムを自動実行!Cronの時間指定方法を分かりやすく紹介
サーバー上の機能の1つに、PHPファイル等のプログラムを自動的に実行させる『Cron(クーロン)』と呼ばれるものがあります。 Cronとは? Cron(クーロン or クローン)とは、指定時間に指定コ ...
続きを見る
-
自サイトのドメインパワーを確認!簡単なドメインパワーチェック方法
「自分のサイトのSEO対策を強化したい!」 「自分のサイトがどれくらいの力を持っているかを知りたい!」 そんな時にはドメインパワーチェッカーのサイトを用いるのが一般的ですが、サイトによってはスコアが異 ...
続きを見る