пятница, 16 сентября 2011 г.

CakePHP cron - создание заданий для cron

Бывает необходимо выполнять какую-либо задачу периодически. Для запуска задач по расписанию используют cron, я расскажу как осуществить вызов определенного метода контроллера в рамках фреймворка cakephp.

В моем случае, для сервиса сбора статистики пользователей социальной сети Вконтакте требовалось проверять данные пользователей каждую минуту.

Необходимая операция выполнялась в методе checkUsersAll контроллера checks.
И так, нам необходимо создать задачу для shell`а cakephp, эта задача уже и будет вызываться cron`ом. Ничего сложного, нужно только создать файл app/vendors/shells/check.php и поместить в него следующий код:

<?php
class CheckShell extends Shell {
function main() {
echo date("d-m-Y h:i:s") . ' Start users checking';
$this -> requestAction(array('controller' => 'checks', 'action' => 'checkUsersAll') );
}
}
Осталось лишь прописать задачу в cron:
sh /home/dimmduh/statta.ru/http/statta/cake/console/cake check  -app "/home/dimmduh/statta.ru/http/statta/app/" >> /home/dimmduh/statta.ru/http/statta/statta_cron_users_check.log
Важно! Используйте абсолютные пути. (естественно, у вас они будут другими)
check - это созданная задача для cake shell`а
параметр -app - путь до каталога с приложением
 >> /home/dimmduh/statta.ru/http/statta/statta_cron_users_check.log
запись вывода в файл