Um Cron Job agenda comandos no servidor em horários definidos. É usado para filas, relatórios, renovação de cache, rotinas de aplicações e tarefas de manutenção. O agendador não “abre uma URL como um navegador” por padrão: ele executa um comando em ambiente não interativo, com caminho, versão do PHP e variáveis que podem diferir do site.
Antes de agendar
- confirme na documentação da aplicação o comando oficial;
- execute manualmente quando houver terminal autorizado;
- use caminhos absolutos;
- verifique se duas execuções simultâneas são seguras;
- defina onde registrar saída e erros;
- não coloque senha, token ou chave diretamente no comando exibido no painel.
Os cinco campos do cron
minuto hora dia-do-mês mês dia-da-semana comando
0 3 * * * /caminho/comando
| Expressão | Significado |
|---|---|
*/5 * * * * | a cada cinco minutos |
0 * * * * | no minuto zero de cada hora |
30 2 * * * | todos os dias às 02:30 |
0 8 * * 1 | segunda-feira às 08:00 |
0 4 1 * * | dia 1 de cada mês às 04:00 |
O horário segue o fuso configurado no servidor. Não presuma o fuso do navegador; crie um teste e registre o instante real.
Como criar no cPanel
- Abra Advanced > Cron Jobs.
- Configure o e-mail de notificação apenas se a rotina gerar saída útil; volume alto pode lotar a caixa.
- Escolha uma predefinição ou preencha os cinco campos.
- Informe o comando completo, salve e confirme a linha listada.
- Após o primeiro horário, confira log, efeito esperado e consumo de recursos.
Exemplo com PHP CLI
/usr/local/bin/php -q /home/USUARIO/app/artisan schedule:run
O binário é apenas exemplo. Descubra o executável e a versão corretos no ambiente. Se o site usa uma versão e o cron chama outra, extensões e comportamento podem mudar. Para frameworks, siga a documentação da versão instalada.
URL via HTTP: use somente quando necessário
/usr/bin/curl --fail --silent --show-error https://exemplo.com/cron-endpoint
Um endpoint público pode ser acionado por terceiros. Proteja-o com autenticação apropriada, limite de origem e idempotência; não exponha segredo em URL ou log. Sempre que possível, prefira comando local fornecido pela aplicação.
Evite execuções sobrepostas
Se uma tarefa leva 12 minutos e roda a cada 5, várias instâncias podem concorrer, duplicar envios ou travar banco. Use o mecanismo de lock da aplicação ou uma trava segura, confirme encerramento em falha e defina timeout. Não mate processos aleatoriamente sem identificar PID, usuário e impacto.
Saída e log
Enquanto diagnostica, redirecione saída e erro para arquivo dentro de diretório protegido e faça rotação:
/caminho/comando >> /home/USUARIO/logs/rotina.log 2>&1
O caminho é ilustrativo. Não grave log dentro de pasta pública se ele puder conter dados ou caminhos internos. Depois de estabilizar, mantenha telemetria suficiente; enviar tudo para /dev/null elimina evidência importante.
Erros frequentes
command not found: binário sem caminho absoluto ou ambiente PATH diferente;permission denied: arquivo sem permissão, proprietário incorreto ou diretório inacessível;- funciona no navegador, não no cron: diretório atual, PHP, variáveis ou usuário diferentes;
- não roda no horário: expressão ou fuso interpretado incorretamente;
- roda várias vezes: agendamento duplicado na aplicação, plugin e cPanel;
- sem efeito e sem erro: saída descartada, lock antigo ou código encerra com sucesso indevido.
Segurança e desempenho
Use a menor frequência necessária. Proteja arquivos de configuração, valide argumentos e aplique princípio do menor privilégio. Rotinas intensivas devem evitar pico, mas “madrugada” pode coincidir com backups. Monitore CPU, memória, I/O, processos, duração e crescimento do log.
Se o agendamento já existe e falha, siga Cron no cPanel não executa. Consulte também logs do cPanel, limite de recursos e versão do PHP.
Referência oficial: cPanel — Cron Jobs.
Recursos relacionados
Continue com tutoriais, ferramentas e serviços relacionados ao diagnóstico.