【cron】CakePHP2.xのコントローラ/アクションをcronで実行する方法

CakePHP
記事内に広告が含まれています。

CakePHP2(2.3.10)で、cronを使って、コントローラー、アクションを実行する事があったので、忘備録としてポストします。

CakePHP2でcron実行

まずはこちらを読みましょう。大切なことは殆ど書かれています。

では、本題にはいります。

今回のミッションは、予定されているスケジュールに対し、前日の朝9時に起動する cron で「明日予定があるよ」という旨のアラートメールを送信するというもの。

cron は基本的に拡張子が .sh の shell(シェル)をキックして、起動させることで動作します。
そのシェルがCakePHPでは簡単に書くことができるので、非常に重宝しています。

 

コントローラー / アクション

CakePHP2ではシェルの中からコントローラー、アクションを使えるので、今回は

処理A:(1)レコードの抽出
処理B:(1)メール本文の作成、(2)メール送信する

という2種類のアクションを、コントローラー(AlertsController) に作成します。

app/Controller/AlertsController.php

 

シェルの作成

では次に、cron がキックするシェルを作成します。

先ほど「シェルは拡張子が .shのファイル」と書きましたが、CakePHP2 の場合は AppShell を継承する CakePHP 形式の php ファイルで構いません。

app/Console/Command/AlertShell.php

と、以上のようなシェルファイルを作成。
$schedule が false の場合はログを書く仕様としていますが、無くてもよいかと思います。
この辺りは好みかと思います。

 

コマンドラインから起動

では、作成したものを動かしてみましょう。
サーバにアップロードし、ターミナルから以下のようにコマンドを打ち込みます。

文法は

PHPまでのパス CakePHP2のConsole/cake.php シェル名(“Shell”は不要) アクション名

となります。

結果

このように表示され、成功していればメールが送信されているはずです。

 

cronジョブ化

最後に cron に登録してみます。

vi が起動するので、i キーを押下してインサートモードにします。
例として午前9時に起動する内容を記述します。

Esc : w q とキーを押して、セーブします。
以上で登録完了です。

CakePHPUNIX
スポンサーリンク
シェアする
toogieをフォローする
タイトルとURLをコピーしました