(2019年3月23日更新)エックスサーバー側の仕様変更に対応
エックスサーバーのcronでPHPを動かす方法を調べたのだけど、本家エックスサーバーの解説ページが分かりにくいので、自分なりに調べて以下にまとめてみた。
エックスサーバーでcronを動作させる為の方法
上記解説ページの通りに設定すると、以下のようになる。
でも、これでは動作しない。
念のために書くと、上記は 日曜日の12時丁度にtestアカウントのtest.jpのa.phpを実行しようとしたもの。
で、話を戻すと、なぜ動かないのか!?
以下、その原因としてありがちなものを列挙。
コマンドが不足している
上図の中のコマンドはそれだけでは動かない。 動作させているPHPのバージョンに応じて以下のコマンドを頭に足す必要がある。(コマンドパス一覧参照)
PHP5.1 = /usr/bin/php5.1
PHP5.2 = /usr/bin/php5.2
PHP5.3 = /usr/bin/php5.3
PHP5.4 = /usr/bin/php5.4
PHP5.5 = /usr/bin/php5.5
PHP7.0 = /usr/bin/php7.0
PHP7.2 = /usr/bin/php7.2
バージョンがよく分からない人は以下から確認&設定
具体的には以下のようにする(スペースに注意)。
/home/test/test.jp/public_html/a.php
↓ ↓ ↓
/usr/bin/php7.0 /home/test/test.jp/public_html/a.php
もっと分かりやすくするとこんな感じ(PHPのバージョンが7.0の場合)
/usr/bin/php7.0 /home/アカウントID/ドメイン名/public_html/設置ディレクトリ/実行したいPHPファイル
パーミッションが間違っている
実行するPHPファイルのパーミッションを755にする。
文字コードの問題
実行するPHPの文字コードをUTF-8にする。
やり方が分からない場合はKanjiTranslatorで「UTF-8(BOM無し)/改行=CR+LF)」で変換すれば良い。
include(インクルード)が相対パス
実行するPHPの中にinclude、include_once、require、require_onceを用いており、しかもファイルパスを相対アドレスで表記している場合、それが原因で動かない事が往々にしてある。(うちのcronは、これが原因で、先日のエックスサーバーのアップデートでいきなり動かなくなった)
具体的には、以下のように相対パスになっているものを、、、
include '/test.php'; require '/../abc/test2.php';
以下のように絶対パスを定数にして、関連するファイルすべてのinclude系に定数を入れる。
define("T_DIR",__DIR__); include T_DIR.'/test.php'; require T_DIR.'/../abc/test2.php';
なぜそうするかは、パシャログさんの記事がイケてるので、そちらを参照のこと。
cronの設定の仕方覚え書き
設定時に、覚えておくべきと便利かなぁって部分を列挙してみる♪
曜日
曜日の数字は以下のように捉えられる。
0=日曜日 1=月曜日 2=火曜品 3=水曜日 4=木曜日 5=金曜日 6=土曜日 7=日曜日
複数の条件を指定
分、時間、日、月、曜日すべてにおいて、複数指定する時は以下のようにカンマで区切る
0,20,40
未指定
指定しない。いつでもいい。すべてが対象。というときはアスタリスクを使う。
こいつ → *
最終的なcron設定画面
こんな感じ♪
コメント