CakePHP2でCronを使う方法です。
CakePHP Ver1とはだいぶ変更されているので、新しく覚え直す必要がありますね。
CakePHPでCronを使うときは「Shell」を使います。「Shell」というと聞きなれないですが、「Controller」や「Model」が使いこなせていればさほど問題は無く使いこなせると思います。
ファイルの作成とテーブル・カラムの作成
まず、「Cron」を使うには、実行するファイルを作る必要があります。
どこに作るか?というと
Appフォルダの中の「Console>Command」の中に作成します。
・Config
・Console>Command ←ここです。
・Controller
前準備としてMySQLに「post」というテーブルを作り、「name」というカラムを作成して下さい。
そして「PostShell.php」というファイルを作成し、以下のソースをコピーしましょう。
下記のアクションは「name」というカラムに「text」という文字を登録するプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 |
App::uses('App','/Console/Command'); class PostShell extends AppShell { public $name = 'Posts'; var $uses = array ('Post'); function add(){ $data['name']='test'; $this->Post->save($data); $this->out(); } } |
「controller」を作るときのソースと良く似ています。
まず、「App::uses(‘App’,’/Console/Command’);」で「AppShell.php」を読み込みます。
そして、「class PostShell extends AppShel{}」というクラスを作ります。
実行テスト
Cronに登録する前に、コンソールから直接ファイルを叩いてテストしてみます。
このときの書き方には注意が必要です。
/phpへのパス /CakeのCoreライブラリへのパス/Console.cake.php Shellファイル名 アクション名 -app /CakeのAppディレクトリ/
長いので細かく説明しますと
「PHPへのパス」
これはコンソールで whereis php と入力すると表示されます。私の環境では「/usr/bin/php」でした。
「CakeのCoreライブラリへのパス」
Cakeのコアライブラリを設置したパスを記載します。
/usr/lib/cake/lib/Cake/ などとなります。(設置した場所により異なります)
この後ろに、Console.cake.phpをくっつけます。
/usr/lib/cake/lib/Cake/Console/cake.php
「Shellファイル名」
今回はPostShell.phpというファイルを作成したので、Postを記載します。Shell.phpは必要ありません。
「アクション名」
今回動かしたいアクションは add なので add となります。
「CakeのAppディレクトリ」
設置した場所により異なります。私の場合は「/home/me/test」でした。
ディレクトリの前に -app をつけます。
上記を連結すると
/usr/bin/php /usr/lib/cake/lib/Cake/Console/cake.php Post add -app /home/me/test
になります。
これで無事にデータが登録されたと思います。
Cronへの登録
あとはCronに登録するだけですね。
コンソールからcrontab -eを実行
1 |
# crontab -e |
Cronを登録
1 |
* * * * * /usr/bin/php /usr/lib/cake/lib/Cake/Console/cake.php Post add -app /home/me/test |
まとめ
Shellファイルの作り方とCronを実行するパスの書き方が解れば、そんなに難しくはないですね。
はじめパスの書き方が解らずに長い時間試行錯誤しました。
今回のテストファイルは簡単なものですが、コントローラーに作ったファイルを使ってアクションを実行することもできます。
人気記事一覧
- MySQL 最大の値・最新の日付データを1つ抽出する方法(MAX)
- [CakePHP] XformHelperの使い方
- Linux: スワップファイル(swp)の削除方法
- HTMLのForm methodとactionについて
- PHPでカンマ区切りデータを配列に入れる方法 (explode)
- [エラー対処] failed to open stream: No such file or directory
- [CSS]ブロック要素(div)の高さを、内部のfloat要素に合わせて自動調整する
- [vsftp] FileZillaから接続できない場合の対処法
- PHP5.1→PHP5.3へバージョンアップする方法(CentOS)
- PHPでテキストを1行ずつ読み込む方法(file_get_contents,explode)