ZAPAnet総合情報局 > ZAPAブログ2.0 > さくらのレンタルサーバ:CRONでPHP実行

さくらのレンタルサーバ:CRONでPHP実行

2012年10月02日 プログラミングTIPS


さくらインターネット が提供している「さくらのレンタルサーバ 」。さくらインターネットのサーバーは、このブログでも利用している専用サーバの他に、共有サーバタイプの「さくらのレンタルサーバ スタンダード 」もレンタルしています。

この共有サーバタイプには、いくつかプランがあって、一番安いのは「さくらのレンタルサーバ ライト 」の月額125円です。昔は安い共有レンタルサーバというと、性能が低かったり、PHPやデータベースが使えなかったり、いろいろと制限があったりしました。さくらのレンタルサーバのライトプランは、今年8月からPHPにも対応したようです。

データベースを利用しないのであれば、今後は激安なライトプランのレンタルも検討してみても良いのかもしれません。今利用している共有サーバは「さくらのレンタルサーバ スタンダード 」で、月額500円です。HDD容量は10GBで、PHPやデータベースなど必要最低限の機能は全て備えていて、価格も安く利用しやすいプランです。


さて、このサーバーを使って、CRONを実行してみたくなりました。CRONの読み方は、自分は「クーロン」と発音していますが、人によっては「クロン」だったり「クローン」だったりします。今調べてみたところ、海外では、「クロン」や「クローン」が一般的らしいので、これからは「クロン」と発音しようかと思います。

CRON(crontab)は、サーバー上で、定時実行のスケジュール管理を行うために用いられるコマンドのことです。CRONを使うと、定期的にサーバー上でコマンドを実行できるようになります。一時間に一回自動的にコマンドを実行させたり、毎週月曜日にスクリプトを動作させたり…といったことが可能になります。

このCRONを使って、PHPプログラムを実行させてみることにしました。さくらのレンタルサーバ スタンダードは、CRONに対応しています(ライトプランは、現時点ではCRONに対応していないようです)。以下、CRONでPHPを実行させるための設定方法です。

1.さくらインターネットのサーバコントロールパネルにログイン

まず、さくらインターネットのサーバコントロールパネルにログインします。

2.コマンドパスを確認

コントロールパネルの「サーバ情報の表示」から、「サーバに関する情報」で各種プログラムのコマンドパスを確認しておきます。
コマンド名 コマンドパス バージョン
PHP /usr/local/bin/php 5.2.17

上記のように表示されました。「/usr/local/bin/php」が、レンタルしているサーバーでのPHPのパスです。

3.CRONの設定(実行日時を指定)

続いて、「CRONの設定」から、CRON スケジュールの設定をします。
CRON機能は【上級者向け】です。
CRONの設定を誤った場合、思わぬ負荷をサーバに与えることになります。
必要がなければ変更しないでください。
と書いてあるので、必要がなければ変更してはいけません。

CRONを設定するには、実行コマンドと実行日時を指定する必要があります。実行日時については、ページ内<参考資料>を見て、簡単に設定できます。例えば、毎時5分に指定のプログラムを実行するのであれば、このように設定します。

毎時プログラムを実行する場合
(毎時5分に指定のプログラムを実行)
実行日時 *
*
*
5

このように設定すれば、毎時5分になる度に、指定したコマンドが自動的に実行されます。

4.CRONの設定(実行コマンドを指定)

続いて、実行コマンドの設定です。こちらは設定方法が難しいです。注意事項はこのように記載されています。
<注意事項>
コントロールパネルから設定できるCRONは5つです。
CRON登録する前に、プログラムへ実行権限を与えてください。
コマンドパスは、絶対パスで正しく指定ください。
メモリやCPUに著しく負荷をかける処理は他のお客様にご迷惑がかかりますのでおやめください。 サーバ運用に支障をきたす場合はやむを得ない場合には、予告無く設定解除、機能制限することがあります。
実行頻度が1時間以内に連続する場合や、CPU処理時間が60秒以上連続で利用される場合、予告なく設定が削除される場合があります。
これだけ読んでも設定方法はイマイチわかりません。また、実行コマンド入力欄の下には、このように書かれています。
コマンドの標準出力を postmaster へ送りたくない場合、コマンドの後に1> /dev/null を加えてください。
難しいですね。

結論として、実行ディレクトリが「www」直下で、そこに置いてあるPHPスクリプトを実行させる場合、このように設定すればOKでした。
cd /home/アカウント名/www; /usr/local/bin/php スクリプト名.php 1> /dev/null

これで指定時間ごとに、PHPスクリプトが実行されるようになりました。
(事前に、PHPファイルに実行権限を与えておく必要があります。また、コマンドに「1> /dev/null」を加えているため、CRONが実行されても、メールは飛んでこないようになっています。メールが欲しい場合は、「1> /dev/null」の記述は必要ありません)


さくらインターネットとしては、あまりCRONで高負荷をかけられたくないのかもしれませんが、もう少しわかりやすくページを作っておいてもらいたいです。せめて、PHPスクリプトを実行させる場合や、Perlを実行させる場合などの記述例を、簡単にでも良いので載せておいてもらいたいです。

なお、CRONは1アカウントに付き5つまでの設定らしいので、もし5つ以上必要なら、スクリプト内で分岐させれば良いかと思います。スケジュールを1時間ごとに設定しておいて、そのスクリプト内で、時刻や日付や曜日を判断して実行するような感じで(高負荷は禁止されています)。


というわけで、さくらのレンタルサーバを使って、CRONでPHPを実行させる方法でした。