Michael Mafort

Facilidades para sua vida – Parte 8 – Cronjobs com cakephp

by Michael Mafort on fev.26, 2009, under CakePHP, Facilidades para sua vida, Linux, PHP

Bom pessoal, de volta a ativa, vou neste post falar um pouco sobre como utilizar tarefas agendadas utilizando o crontab do linux.

Primeiro passo, copie o arquivo webroot/index.php para cron_dispatcher.php.

No cakephp versão final 1.2.1.8004, a linha a ser editada é após a 83, que está o seguinte código:

1
2
3
if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
		trigger_error("CakePHP core could not be found.  Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php.  It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
	}

Você irá substituir para:

1
2
3
4
5
6
7
8
9
10
if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
		trigger_error("CakePHP core could not be found.  Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php.  It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
	}
else {
    define(‘CRON_DISPATCHER’, true);
    if($argc == 2) {
        $Dispatcher = new Dispatcher();
        $Dispatcher -> dispatch($argv[1]);
    }
 }

Assim seu script dará acesso ao seu controller através do dispatcher, utilizando o phpclient. Para executar o script utilizando o crontab, deve-se fazer o seguinte:

1
* * * * * php -q /var/www/app/webroot/cron_dispatcher.php /products/cron/

Onde os asteriscos na ordem significam:
1 – Minuto (0-59)
2 – Hora (0-23)
3 – Dia (1-31)
4 – Mês (1-12)
5 – Semana (0-6)

Para que os valores repitam sempre utilize o mesmo asterisco, exemplo: para executar o script 1 vez por dia a 0h use:

1
0 0 * * * php -q /var/www/app/webroot/cron_dispatcher.php /products/cron/

“php -q” executa o arquivo passado a seguir como parametro. neste exemplo vai chamar o arquivo /var/www/app/webroot/cron_dispatcher.php (lembre de passar o caminho absoluto ao arquivo).
O parametro /products/cron/ diz que o seu dispatcher vai chamar o action cron do controller products.

Agora já esta pronto o seu crontab, é só rodar e testar.

Abraço!


1 Comment for this entry

Leave a Reply

Procurando por algo?

Digita ai pra ver se encontramos:

Não achou o que procurava? Envie um comentário para o autor informando o que deseja!