こんにちは!ぐちです。
Webシステムを作っているときに定期処理といいますかバッチ処理って必須ですよね。そんな時にCakePHPを使ったバッチといいますかシェルといいますか定期処理を行うための方法をご紹介します。
AppShell
下記は通常のControllerクラスです。
<?php App::uses('AppController', 'Controller'); class HogeController extends AppController { public function hoge() { // 〜中略〜 } }
上記に加えてAppShellクラスを継承した下記のクラスも用意します。
<?php App::uses('HogeController', 'Controller'); class HogeShell extends AppShell { public function startup() { parent::startup(); $this->HogeController = new HogeController(); } public function hoge() { $this->out($this->HogeController->hoge()); } }
Shellクラスから実行したいアクションを呼び出すだけですね!
これでphpコマンドにて上記のShellクラスを起動すればバッチ処理が起動します。
phpコマンドの第1引数はCakePHPコマンドです。第2引数はShellクラス名で、第3引数はShellクラスのアクション名です。
php ./app/Console/cake.php Hoge hoge
定期実行
ここまででCakePHPのコントローラをバッチ起動することができたので次は定期起動するようにcrontabに登録しましょう。
crontab -e
上記のように実行することでユーザー用にジョブを追加することができます。viエディタと同じような操作ですので起動したら「a」キーで編集を開始して「esc」キーでコマンドモードに戻り「:」キー→「wq」と打てば保存することができます。
*/10 * * * * php /var/www/html/project/app/Console/cake.php Hoge hoge
上記の例は10分おきに起動され続けます。
たったこれだけでCakePHPの便利な機能をバッチ処理できるようになります。非常に便利ですよねー。