Home > CakePHP Tips > libs > Shell クラスを利用した cron ジョブ

Shell クラスを利用した cron ジョブ

Shell クラス(Cake コマンド)を利用した cron ジョブを実行したい場合の方法。

cron ジョブの実行方法として、任意の URL にアクセスして処理する方法と Shell クラス(Cake コマンド)を利用して処理する方法の2通りがある。

メリットとデメリット

URL へのアクセスと Cake コマンドでの処理方法にはメリット・デメリットがあるので使い分けが必要。

URL へのアクセス

URL へのアクセスは、ブラウザ等で外部からアクセスした場合でも処理が可能。
そのため、第三者にアドレスを知られてしまった場合に予期せず処理が走ってしまう。
第三者に処理をさせたくない場合は、IP アドレスでフィルタするなどの対処が必要。
使用しているサーバで cron が使用できない環境では、外部で cron を実行する Webサービスなどを利用することで、擬似的に cron 処理を行うことが可能。

※参照
Monitor Web Server and Web Based Cron – Webcron.org – Home

Cake コマンド

シェルコマンドのみで処理をし、第三者から処理を実行されることがため安心安全。
cron が利用できな環境では使用することができない。
構成がシンプルなため実装が容易。

Cake コマンドによる cron ジョブ前述

文中で使用する PATH は下記の通り定義するものとする。
※[CAKE] は CAKE_CORE_INCLUDE_PATH/cake
※[VENDERS] は CAKE_CORE_INCLUDE_PATH/vendors
※[ROOT] は ROOT
※[APP] は APP_DIR

詳しいディレクトリ構成は下記の「ディレクトリ構成」を参照。
コンソールを使用するインストール

URLへのアクセスによる処理を cron で実行する場合の処理を下記を参照のこと。
cron ジョブ

シェルファイル を作成

[VENDORS]/shells/ 配下に cron.sh を作成
※ファイル名は任意

cron.sh の内容は下記の通り。

#! /bin/sh
/usr/bin/php [CAKE]/console/cake.php $2 $3 $4 -app [ROOT]/$1

#環境によって下記でも可
#/usr/bin/php ~/lib/cake/console/cake.php $2 $3 $4 -app ~/app/$1

※/usr/bin/php は PHP 実行可能ファイルの場所 (大部分の Linux システムでは、/usr/bin/php か /usr/local/bin/php)。よくわからない場合には、コマンド which php で調査。

引数

$1 : アプリケーション名([APP])
$2 : シェル名(ファイル名、Shell を除いたクラス名と同名)
$3 : アクション名(ファンクション名)
$4 : 引数(省略も可。複数ある場合は、$5、$6 と増やす)

Shell クラスの作成

[ROOT]/[APP]/vendors/shells/ 配下に exsample.php を作成。
※ファイル名は任意。

exsample.php の内容は下記の通り。

<?php
class ExsampleShell extends Shell{
	var $uses = array('Model'); // モデルを使用する場合はモデル名を記述

	function action() {
		// 処理内容(省略)

		// 参考1
		// Controller と同様にモデルを使用することができる。
		$this->Model->find('all');

		// 参考2
		// 引数は $this->args に配列で格納される。
		$arg0 = $this->args[0];
		$arg1 = $this->args[1];
	}
}

cron ジョブの設定

cron ジョブの設定は /etc/crontab に下記の通り記述する。

分 時 日 月 曜日 ユーザ コマンド

毎時1分に cron を実行する例

01 * * * * root sh [VENDORS]/shells/cron.sh [アプケーション名] [シェル名(ファイル名)] [アクション名] [引数...]

XREA で設定する場合

管理画面のCRONジョブで設定

分 時 日 月 曜日
1 * * * *
[VENDORS]/shells/cron.sh [アプケーション名] [シェル名(ファイル名)] [アクション名] [引数...] >/dev/null 2>&1

※ここで [VENDORS] は /virtual/[アカウント名]/ は含まない。
※>/dev/null 2>&1 は cron 実行内容をメールで送信しないようにしている。

※例

分 時 日 月 曜日
1 * * * *
lib/vendors/shells/cron.sh app example action param >/dev/null 2>&1

参考

cron の設定ガイド
CakePHP1.2のShellとTaskを使ってみる。 – yuhei.kagaya

あわせて読みたい関連記事

Home > CakePHP Tips > libs > Shell クラスを利用した cron ジョブ

検索
Feeds
メタ情報

ページの先頭へ