Mix Host で cron を使って PHP を自動実行
Mix Host では、定期的に実行したいメンテナンスや情報を取得するためのスクリプトを自動で実行するためのプログラム cron (クロン)を使うことができます。
Windows でいうところのタスクスケジューラみたいなもので、登録したスクリプトをスケジュール通りに実行してくれるものです。
Mix Host では cron の登録を cPanel から行えます。平たく言えばウェブブラウザで自動実行を設定できるということ。
cron 登録法
cron への登録は cPanel から行います。やることは2つだけ。
- cPanel の 下の方にある [詳細] > [Cron ジョブ] に移動
- Cron ジョブページで スケジュール と コマンド+ファイルパス を記載
Cron ジョブのページはこ唸っています。
スケジュールは、分、時(時刻)、日、月、平日で指定できます。分単位で設定できるので、時間をずらしての実行も簡単に行なえます。
右側の「共通設置」で上から順に埋めていけばOK。すべて * にすると毎日毎分実行されます。一番上にある共通設定で自動的に埋まるので、後から個別で修正するほうが早いかもしれません。
時刻の書式はこちらのページに詳しく書かれています。
コマンドの書き方
一番下にある「コマンド」の欄には、 /usr/bin/php というコマンドに続けて実行したい php スクリプトのファイルパスを指定します。scheduled.php というファイルを実行したければこうなります。
/usr/bin/php /home/ユーザーID/public_html/ディレクトリ/scheduled.php
ユーザーIDは cPanel メイン画面右側の[一般情報]に記載されている「現在のユーザー」のことです。
データベースやユーザーの作成時に自動的に接頭辞としてくっつくアルファベットの文字列でよく目にしてるアレです。
ようするに「/usr/bin/php」の後にスペースをいれて、「ホームディレクトリ/public_html/ファイルパス」を書けばOK。
「コマンド」には cron に登録したいファイルをフルパスで記載する。ということは、特定のドメインに置きたい場合は、ドメインのルートディレクトリ(ドキュメントルート)以下までのパスを書きます。
Mix Host では、ドメイン登録の際のデフォルトのドキュメントルートは public_html/domain名 になっています。
abc123.com というドメインを利用していて、登録の際にドキュメントルートを変更しておらず、ルートに実行スクリプトを置く場合はこうなるはず。
/usr/bin/php /home/ユーザーID/public_html/abc123.com/scheduled.php
/usr/bin/php から /usr/bin/を外して、php /home~でも動きます。※php の後ろにスペースは必要です。
うまくいかない?
登録したスクリプトが実行されると電子メールで結果が届きます。なんか文字化けしてコードを変えてもだめなので、そういうものだと考えるしかないようです。
成功時
メールタイトル:Cron <ユーザー名@jp*> php /home/ユーザー名/ファイルパス
本文:2018/08/05 06:00:01 文字化けした文字
失敗した場合は本文にエラーの内容が記載されています。こちらは英語表記なのできちんと表示されます。
ファイルパスが間違っている
本文:No such file or directory
電子メールの登録と通知送信解除
デフォルトではcron が実行されると電子メールで通知されます。
cron 実行通知用の電子メールアドレスを登録することができるので、普段使っているメールアドレスを登録しておけば確認のためにログインする必要もなし。
が、煩わしいのなら停止させることも出できます。
cron ジョブページにも書かれているように、コマンドの後ろに >/dev/null 2>&1 を加えます。
/usr/bin/php /home/ユーザーID/public_html/ファイルパス/scheduled.php <span class="bold-red">>/dev/null 2>&1</span>
一括では設定できないので、コマンドごとに設定する必要があります。
外部からアクセスされたくない場合
mix host では初期ドメインが自動的に作られます。
cPanel メイン画面右側の[一般情報]に記載されている[プライマリドメイン]というやつ。
***.mixh.jp
となっていると思います。
***.mixh.jp のドキュメントルートは public_html 。public_html 以下だと、どこにファイルを置こうが外部からアクセスできる状態です。
cron に登録したファイルパスを知られなければアクセスしようがありませんが、原理的には誰にでもアクセスできる状態です。
外部からアクセスされたくない場合はアクセス制限をかけるか、public_html の上のホームディレクトリ /home/userid に置くほうがいいでしょう。
ファイルマネージャーではデフォルトのディレクトリが public_html になっていますが、「一階層上へ」でホームディレクトリに移動できます。