A minha tarefa do cron não roda no VPS: as causas habituais

VPS e ServidoresAdministração e problemas··· 1.071 visualizações· 4 min de leitura

Quando uma tarefa do cron não roda num VPS, a causa quase nunca é o cron: é o ambiente em que ele corre. O cron inicia com um ambiente mínimo, sem o seu PATH, sem o seu terminal e sem o seu diretório de trabalho. O comando que funciona na linha de comandos falha lá. A cura é usar caminhos completos, redirecionar a saída para um arquivo, e ler esse arquivo.

Passo a passo

1 Veja a tarefa. crontab -l lista as do seu usuário (sudo crontab -l -u root as do root). Tarefas de sistema estão em /etc/crontab e /etc/cron.d/ e levam uma coluna extra com o nome do usuário.
2 Confirme que o serviço está ativo. systemctl status cron em Debian e Ubuntu; systemctl status crond em AlmaLinux e Rocky.
3 Veja se o cron chegou a tentar. Em Debian e Ubuntu, grep CRON /var/log/syslog | tail; em qualquer sistema com systemd, sudo journalctl -u cron (ou -u crond). Se a linha aparece, o cron correu o comando e o problema está dentro dele.
4 Capture a saída. Acrescente ao fim da linha >> /var/log/meu-cron.log 2>&1 (crie o arquivo ou use uma pasta onde o usuário possa escrever). Espere uma execução e leia o arquivo: o erro estará lá.
5 Use caminhos completos. /usr/bin/php /var/www/seudominio.tld/tarefa.php em vez de php tarefa.php. Descubra o caminho com which php. Se o script abre arquivos por caminho relativo, comece a linha por cd /pasta &&.
6 Experimente o mesmo comando, mas com o ambiente do cron: env -i /bin/sh -c "o_seu_comando". Se falha assim, é o ambiente.

As causas, por ordem de frequência

Sintoma Causa e remédio
Funciona no terminal, falha no cron PATH e ambiente mínimos. Caminhos completos para o programa e para os arquivos; variáveis definidas no próprio crontab ou no script.
Nada no registro do cron O serviço está parado, ou o arquivo de crontab tem um erro de sintaxe. Os cinco campos de tempo são: minuto, hora, dia do mês, mês, dia da semana.
O script “não tem permissão” Falta o bit de execução (chmod +x script.sh), ou o usuário do cron não lê a pasta: permissões de arquivos.
Uma linha com % parte-se No crontab, o % significa nova linha. Escape-o com \%, por exemplo em date +\%F.
Corre à hora errada O cron usa o fuso horário do servidor. Veja-o com timedatectl. Uma tarefa “às 2” é às 2 desse fuso, não às suas. Para o acertar: o fuso horário e o relógio do VPS.
Corre, mas não faz nada O comando termina com erro que ninguém vê. Sem redirecionamento da saída, o cron tenta mandá-la por e-mail local, que ninguém lê.
Corre duas vezes ao mesmo tempo A tarefa anterior ainda não acabou. Use flock para impedir sobreposições.
Não edite o crontab de outro usuário por engano. Uma tarefa que escreve arquivos como root numa pasta do site deixa-os com dono root, e o site deixa de os conseguir alterar. Ponha a tarefa no crontab do usuário que é dono dos arquivos (sudo crontab -e -u nomedousuario).
Cuidado com tarefas que apagam. Ensaie primeiro à mão e com uma pasta de ensaio. Uma linha com um caminho mal escrito e um rm é difícil de desfazer, e num VPS as cópias são suas: copiar um VPS.
Para tarefas com PHP e para cópias automáticas temos artigos prontos: rodar um script PHP a partir do cron e cópias automáticas da sua aplicação. Sobre cron em geral e no painel de hospedagem: tarefas cron.

Dúvidas sobre o que está do nosso lado, como a máquina ligada ou a rede? Abra um pedido e vemos.

Abrir um pedido de suporte

VEJA TAMBÉM

Onde estão os registros num VPS Linux

Permissões de arquivos num VPS

Rodar um script PHP a partir do cron

Cópias automáticas da sua aplicação

PRODUTO RECOMENDADO

Servidor VPS com acesso root

Recursos só seus, o sistema que escolher, reinstalação quando quiser. desde R$ 46,20/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.