有効期限の過ぎた仮登録ユーザをcronで自動的に削除する〜その2〜
前回の方法では、仮登録ユーザを削除する処理をcronからだけでなく
ブラウザでURLを入力しても実行できてしまうという欠点がある、と
CakePHPのフォーラムで指摘を受けました。
今回は、CakePHPコンソールから独自のシェルを実行する、という処理を
cronで自動的に行えるようにします。
環境
独自のシェルを作成
有効期限の過ぎた仮登録ユーザを検索・削除する処理です。シェルの名前は『refresh』です。
【/vendors/shells/refresh.php】
class RefreshShell extends Shell{
var $uses = array('User');
function main(){
$conditions = array(
'User.status' => '0', //1が正常、0は仮登録
'User.created <' => date('Y-m-d H:i:s', strtotime('-1 hours'))
);
$this->User->deleteAll($conditions);
}
}
crontabを設定
端末で『crontab -e』と入力して編集画面を開き、以下のように記述。毎時59分に、CakePHPコンソールでrefreshシェルを実行する、という意味です。
『php (CakePHPコンソールのphpファイル) (シェル名) -app (appフォルダ)』
59 * * * * /opt/lampp/bin/php /home/sutara/Cake_test/cake/console/cake.php refresh -app /home/sutara/Cake_test/app
感想・参考ページ
こちらのほうが前回の方法よりもシンプルで、そして一般のアクションとの住みわけも明確にできていいですね。
※database.phpでSQLiteのDBファイルの場所をフルパスで指定しなければ
ならないのは、前回と同じ。
CakePHPでシェル機能を使ってみる|ASTRODEO
Cookbookでのcrontabの書き方は、どうも理解できませんでした。
こちらの書き方を真似しました。
"ユーザ登録・確認システムソースコード" フォーラム - CakePHP Users in Japan
一連の自動処理について僕がいろいろと質問したトピックです。
…お世話になりましたm(_ _)m