apache crontab não está executando

0

Eu uso o cron para executar alguns scripts php (tarefas de fundo owncloud etc). Meu servidor roda nginx e PHP via php-fpm, que por padrão executa processos PHP sob o usuário apache , o único usuário com acesso de gravação a /var/www além do root. Portanto, é bom adicionar esses trabalhos em segundo plano ao crontab do apache:

crontab -u apache -e

O conteúdo:

MAILTO=cron@localhost
*  *  *  *  * echo "..." | mail -s "crontest" cron@localhost

Isso deve me enviar um email a cada minuto, mas isso não acontece. Quando executo o comando como o usuário do apache ( sudo -s -u apache ), ele funciona bem, mas o cronjob nunca é executado.

Encontrei algumas menções a "contas bloqueadas" aqui , mas não tenho certeza se a solução sugerida é uma boa ideia.

    
por jgillich 05.08.2013 / 13:37

2 respostas

1

Ok, /var/log/cron me deu uma pista.

CROND[7709]: (apache) CMD (echo "..." | mail -s "crontest" cron@localhost)
CROND[7709]: (CRON) ERROR chdir failed (/usr/share/httpd): No such file or directory

O problema é que o cron tenta mudar para o diretório pessoal do usuário antes de executar qualquer coisa. No entanto, como eu não tinha o apache instalado, o / usr / share / httpd não existia. Acho que criar esse diretório funcionaria, mas usar o sudo como root deve ser a melhor solução aqui.

* * * * * sudo -u apache env TERM=xterm php -f /var/www/owncloud/cron.php

env TERM=xterm evita um aviso do cron.

    
por 06.08.2013 / 12:17
1

Eu não acredito que o número 60 seja válido na coluna de minutos (alguém me corrija se eu estiver errado). O número deve estar entre 0 e 59.

O que você está realmente dizendo para a máquina fazer é "executar echo "..." | mail -s "crontest" cron@localhost a cada 60 minutos". Se você quer que o trabalho seja executado a cada minuto, a linha seria:

*/1 * * * * echo "..." | mail -s "crontest" cron@localhost

link

    
por 05.08.2013 / 15:54