バッチ処理したい時などに使う技である。
■実装
app/vendors/shells/calc.php
以下のようにしてShellクラスを継承する。基本的にはコントローラと同様にモデルなどが使用できるがコンポーネントについては注意が必要である。
date_default_timezone_set('Asia/Tokyo'); //Configure::write('Config.environment', isset($_SERVER['CAKE_ENV']) ? $_SERVER['CAKE_ENV'] : "development");// コマンドラインから叩いている場合、$_SERVERによる環境分岐ができない Configure::write('Config.environment', "production"); class RankShell extends Shell { public $uses = array( 'Logs', 'Ranks' ); /** * 処理を実行する前に読み込むコンポーネントなどを記述する */ public function initialize() { parent::initialize(); //$this->Email = new EmailComponent($this);// コンポーネント名に注意 } /** * ここに記述した処理が実行される */ public function main() { $this->out("start"); if($result = $this->Log->getRank()){ $this->Ranks->deleteAll(); if($this->Ranks->saveAll($result)){ $this->out("success"); } else{ $this->out("failed to save"); } } else{ $this->out("failed to calc"); } } }
■実行
以下のようにして実行できるかどうか確認する。
/usr/bin/php /var/www/hogehoge.justoneplanet.info/cake/console/cake.php calc
■crontab
以下のコマンドを実行してcrontabを編集する。
crontab -e
例えば10時のオヤツを忘れないよう10:15に実行するようにするには以下のようにする。
15 10 * * * /usr/bin/php /var/www/hogehoge.justoneplanet.info/cake/console/cake.php calc
15分ごとに処理をするには以下のように記述する。
*/15 * * * * /usr/bin/php /var/www/hogehoge.justoneplanet.info/cake/console/cake.php calc
以上のようにCakePHPでは非常に簡単にバッチ処理を書くことができる。個人的にはZendFrameworkよりも簡単に感じる。
ピンバック: CakePHPでバッチ処理をする | Isotonic