Welcome to the Cookbook

loading...

3.13.2 Executando Shells como tarefas agendadas

Uma coisa comum para se fazer com um shell é torná-lo uma tarefa agendada de sistema operacional (cronjob) para, p.ex., limpar a base de dados de vez em quando ou enviar newsletters por e-mail. Entretanto, quando você tiver adicionado o caminho do console à variável de ambiente PATH através de ~/.profile, ele estará indisponível para agendador de tarefas.

O seguinte script BASH irá chamar seu shell e anexar os caminhos necessários ao $PATH. Copie-o e salve-o para sua pasta vendors como 'cakeshell' e não se esqueça de torná-lo executável. (chmod +x cakeshell)

#!/bin/bash
TERM=dumb
export TERM
cmd="cake"
while [ $# -ne 0 ]; do
	if [ "$1" = "-cli" ] || [ "$1" = "-console" ]; then 
		PATH=$PATH:$2
		shift
	else
		cmd="${cmd} $1"
	fi
	shift
done
$cmd

Você pode chamá-lo desta maneira:

$ ./vendors/cakeshell myshell myparam -cli /usr/bin -console /cakes/1.2.x.x/cake/console

O parâmetro -cli recebe um caminho que aponta para o executável do PHP CLI, e o parâmetro -console recebe um caminho que aponta para o console do CakePHP.

Agendar uma tarefa com o crontab seria algo como:

# m h  dom mon dow   command
*/5 * * * * /caminho/do/cakeshell myshell myparam -cli /usr/bin -console /cakes/1.2.x.x/cake/console -app /caminho/de/app

Um truque simples para depurar uma tarefa agendada no crontab é atribuir a saída para um arquivo de log. Poderia ser algo como:

# m h  dom mon dow   command
*/5 * * * * /caminho/do/cakeshell myshell myparam -cli /usr/bin -console /cakes/1.2.x.x/cake/console -app /caminho/de/app >> /caminho/do/arquivo.log