
さくらインターネット環境のCakePHPでcronを使ってみる
2013/09/26
表題の通り、さくらインターネット上に展開している CakePHP で cron を使う方法。
対象の CakePHP バージョンは 1.3 です。
コントローラーとアクションを指定して動かしたかったのですが、どうもうまく行かなかったので、あきらめて shell を使ってみました。
さくらインターネットでcron
cron で実現したかったのは、一日1回、API を叩いてデータを取得し、それをDBに登録するというもの。
手動でボタンを押せば取得、DBへのインサートを行う処理までは先に作成しておき、それを シェルに流用することとします。
shellファイル作成
/app/vendors/shells/item.php に cron で動作させる処理を作成。
アクション名を「main」とすると、アクション名を指定しなくても動作します。
独自のアクション名とする場合は、cron の動作時に指定します。
文字コード:UTF8、改行コード:LF で保存し、アップロードの際、パーミッションを「755」にするのを忘れずに。
[php]
class ItemShell extends Shell
{
var $uses = array('Item');
function main()
{
// API処理は省略
// データ登録
foreach( $api_data AS $v )
{
$this->Item->begin();
$save_data = array(
'name' => $v['name'],
'price' => $v['price'],
);
if( !$this->Item->save($save_data, 0) )
{
$this->TmpCoupon->rollback();
}
$this->TmpCoupon->commit();
}
}
}
[/php]
cron設定
さくらのコントロールパネル左メニューの「CRONの設定」をクリック。
実行コマンド欄に以下を記述
[php]
cd /home/アカウント名/cakephp/app; /usr/local/bin/php /home/アカウント名/cakephp/cake/console/cake.php item 1>/dev/null
[/php]
文法は、
cd CakePHPのappまでのパス; phpのパス CakePHPのコンソールまでのパス shellファイル名 1>/dev/null
となります。
前述した、アクション名を main 以外の場合は、shellファイル名の部分を、 shellファイル名 action名 にすれば実行できると思います。
実行日時を設定します。
説明書きにあるとおり、毎時設定の場合は「*」を指定します。
例えば、毎時15分にcronを起動させたい場合は、
月:「*」、日:「*」、時:「*」、分:「15」とします。
1日1回、昼12時に起動させたい場合は、
月:「*」、日:「*」、時:「12」、分:「0」とします。
以上で設定は完了です。
テストする場合は、「分」を調整して、実際にcronとして起動するか確認しながら行なってみてください。
cronの設定の方法は手前味噌ですが、こちらを参照してください。
国外IPを遮断する.htaccessをcronで作成する