さくらインターネット環境のCakePHPでcronを使ってみる
2013/09/26
表題の通り、さくらインターネット上に展開している CakePHP で cron を使う方法。
対象の CakePHP バージョンは 1.3 です。
コントローラーとアクションを指定して動かしたかったのですが、どうもうまく行かなかったので、あきらめて shell を使ってみました。
さくらインターネットでcron
cron で実現したかったのは、一日1回、API を叩いてデータを取得し、それをDBに登録するというもの。
手動でボタンを押せば取得、DBへのインサートを行う処理までは先に作成しておき、それを シェルに流用することとします。
shellファイル作成
/app/vendors/shells/item.php に cron で動作させる処理を作成。
アクション名を「main」とすると、アクション名を指定しなくても動作します。
独自のアクション名とする場合は、cron の動作時に指定します。
文字コード:UTF8、改行コード:LF で保存し、アップロードの際、パーミッションを「755」にするのを忘れずに。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class ItemShell extends Shell { var $uses = array('Item'); function main() { // API処理は省略 // データ登録 foreach( $api_data AS $v ) { $this->Item->begin(); $save_data = array( 'name' => $v['name'], 'price' => $v['price'], ); if( !$this->Item->save($save_data, 0) ) { $this->TmpCoupon->rollback(); } $this->TmpCoupon->commit(); } } } |
cron設定
さくらのコントロールパネル左メニューの「CRONの設定」をクリック。
実行コマンド欄に以下を記述
1 |
cd /home/アカウント名/cakephp/app; /usr/local/bin/php /home/アカウント名/cakephp/cake/console/cake.php item 1>/dev/null |
文法は、
cd CakePHPのappまでのパス; phpのパス CakePHPのコンソールまでのパス shellファイル名 1>/dev/null
となります。
前述した、アクション名を main 以外の場合は、shellファイル名の部分を、 shellファイル名 action名 にすれば実行できると思います。
実行日時を設定します。
説明書きにあるとおり、毎時設定の場合は「*」を指定します。
例えば、毎時15分にcronを起動させたい場合は、
月:「*」、日:「*」、時:「*」、分:「15」とします。
1日1回、昼12時に起動させたい場合は、
月:「*」、日:「*」、時:「12」、分:「0」とします。
以上で設定は完了です。
テストする場合は、「分」を調整して、実際にcronとして起動するか確認しながら行なってみてください。
cronの設定の方法は手前味噌ですが、こちらを参照してください。
国外IPを遮断する.htaccessをcronで作成する