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


























