CakePHPのバッチ(定期起動)処理を作る方法

こんにちは!ぐちです。

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の便利な機能をバッチ処理できるようになります。非常に便利ですよねー。