一定時間おきにサーバー上のプログラムを動かすCRONジョブ。便利です。
某案件で、一日一回海外の為替レートを見て、ショップの売価に反映させるPHPを動かす必要があって使っています。この案件ではコアサーバーを利用していますが、たいした知識も無くCRONジョブを使おうとして、設定にはまったので、反省と備忘録を兼ねて記事にしておきます。
設定画面
そのものずばり、管理画面のメニューに「CRONジョブ」があります。
設定画面を見るとなんとなく、時間とプログラムの場所を書いておけばいいのだなと思いますね。そしてページの下には記述例もありましたので、参考にして処理を書き、該当PHPファイルまでのフルパスと、動かしたい時間(毎朝9時)を書いて設定しました。
こんな感じでした。
しかし、いつまでたっても動きません。
時間を書き換えてみたり、PHPの内容を確認してみたり、やたらと沢山設定してみたりと、
数日ムダにしてはじめて気がつきます。「たぶん根本的に間違っている。」
そこで改めて説明文をよく見てみます。
・上段にCRONジョブの例
・下段にシェルスクリプトの例
が記述してあります。
ここでようやく気がつきます。
CRONジョブはシェルスクリプトを書いて、そのスクリプトを指定時間に動かすサービスである、と。と言うことは「PHPを動かす処理を書いたシェルスクリプト」を書いてサーバーにアップしなくてはなりません。
UNIX使いの方や、サーバー屋さんには当たり前なんでしょうけど、全然分かっていませんでした…。
UNIX使いの方や、サーバー屋さんには当たり前なんでしょうけど、全然分かっていませんでした…。
そもそも説明に
「 「分 時 日 月 曜日」で指定した時間に「/virtual/car/~」で指定したシェルスクリプト(/bin/sh)を実行します。」と書いてあります。よく読まないとダメです。
結局正解はこうなります。
1.シェルスクリプトrate.shを書く
動かしたいPHPをサーバーのフルパスで書いておきます。
#!/bin/sh
#PHP
/usr/local/bin/php /virtual/ユーザーID/public_html/www.aaaa.com/rate.php
exit
2.rate.shをサーバーに置く
FTPでアップ。
3.CRONジョブ設定画面でrate.shを動かす時間を指定する。
rate.shをフルパスで記述します。
1日1回毎朝9時だと図のようになります。
4.指定時間まで待つ。
動けば、完了です。
動けば、完了です。
これでめでたく動くようになりました。
同じバリュードメイン系サービスのxreaやvalue serverもほぼ同じようです。
上手く活用することで、一定時間おきの処理などをサーバーサイドの時間設定で動かすことが出来ますね。
そして何事も説明はよく読みましょう。