Como usar crontab: agende tarefas na VPS Linux
Aprenda a agendar tarefas no Linux: os 5 campos, os atalhos, exemplos para backup e WordPress e os motivos de um script falhar no cron.
Por Redação Eleven Host · @robson.direitodigital · 27 de outubro de 2026 · 8 min de leitura

Capa da Redação Eleven Host para o guia: Como usar crontab: agende tarefas na VPS Linux Arte: Eleven Host
Para saber como usar crontab, rode crontab -e no terminal e escreva uma linha com cinco campos de horário e o comando. O cron, serviço do Linux, executa esse comando nos horários marcados, sem você estar conectado.
Este guia cobre o formato da linha, os operadores, exemplos para quem tem site, os motivos de uma tarefa funcionar no terminal e falhar no cron e como conferir se ela rodou. Os comandos valem para Debian e Ubuntu, e os caminhos são exemplos: troque usuario e seusite pelos seus.
O que é o cron e a crontab
O cron é o serviço do Linux que roda comandos em horários marcados. Cada usuário tem a sua própria tabela de tarefas, chamada crontab. No Debian e no Ubuntu, o serviço se chama cron; confira se ele está ativo com systemctl status cron.
Os comandos para mexer na sua tabela
crontab -eedita a sua tabela. Na primeira vez, o sistema pode perguntar qual editor usar.crontab -llista as tarefas salvas.crontab -l > crontab-backup.txtsalva uma cópia antes de você mexer.
Cuidado com o crontab -r: ele apaga a tabela inteira e não pede confirmação. A tecla do r fica ao lado da tecla do e no teclado, então vale fazer a cópia com crontab -l antes de editar.
Os cinco campos de horário
Segundo o manual (man 5 crontab), cada linha tem cinco campos de tempo, seguidos do comando:
- Minuto: de 0 a 59.
- Hora: de 0 a 23.
- Dia do mês: de 1 a 31.
- Mês: de 1 a 12, ou nomes como
jan. - Dia da semana: de 0 a 7, em que 0 e 7 são domingo, ou nomes como
sunemon.
Exemplo lido em voz alta: 30 2 * * 1 /home/usuario/bin/tarefa.sh significa "às 2h30, em qualquer dia do mês, em qualquer mês, na segunda-feira, rode o script". O * quer dizer "qualquer valor" naquele campo.
Operadores: intervalo, lista e passo
8-11é um intervalo, e inclui os dois extremos: 8, 9, 10 e 11.1,2,5,9é uma lista de valores.*/2ou0-23/2é um passo: na hora, significa a cada 2 horas.
Atenção ao passo: ele vale dentro do campo. Segundo o manual, */35 no campo dos minutos roda nos minutos 0 e 35 de cada hora, e não a cada 35 minutos.
A pegadinha do dia do mês com o dia da semana
Quando o dia do mês e o dia da semana estão os dois restritos (nenhum é *), a tarefa roda se qualquer um dos dois bater. Por exemplo, 30 4 1,15 * 5 roda às 4h30 nos dias 1 e 15 e também em toda sexta-feira.
Atalhos com @
O cron aceita atalhos no lugar dos cinco campos:
@reboot: uma vez, quando o sistema liga.@hourly: o mesmo que0 * * * *.@daily: o mesmo que0 0 * * *.@weekly: o mesmo que0 0 * * 0.@monthly: o mesmo que0 0 1 * *.@yearlyou@annually: o mesmo que0 0 1 1 *.
Exemplos prontos para quem tem site
Estes exemplos usam caminhos fictícios. Antes de usar, descubra o caminho real de cada programa com which php ou command -v php, porque o cron não usa o mesmo PATH do seu terminal.
- Backup todos os dias às 00h05, guardando a saída e os erros em um log:
5 0 * * * /home/usuario/bin/backup.sh >> /home/usuario/logs/backup.log 2>&1 - Script a cada 5 minutos, descartando a saída:
*/5 * * * * /usr/bin/php /var/www/seusite/cron.php > /dev/null 2>&1 - Tarefa semanal, aos domingos às 3h:
0 3 * * 0 /home/usuario/bin/limpar-logs.sh
O >> arquivo 2>&1 acrescenta ao log a saída normal e as mensagens de erro. O > /dev/null 2>&1 descarta as duas. Se o seu backup.sh gera um dump de banco, o guia Importar banco de dados MySQL: passo a passo e erros comuns mostra como restaurar o arquivo depois.
wp-cron do WordPress pelo cron do sistema
Segundo a documentação do WordPress ("Hooking WP-Cron Into the System Task Scheduler"), você pode desligar o disparo do wp-cron pelas visitas e chamá-lo pelo agendador do sistema. Em dois passos: adicione define('DISABLE_WP_CRON', true); ao wp-config.php e agende a chamada:
*/15 * * * * /usr/bin/php /var/www/seusite/wp-cron.php > /dev/null 2>&1
Confira o caminho do PHP e a pasta do site antes de salvar. Para instalar o WordPress do zero, veja Instalar WordPress na VPS: passo a passo com Nginx.
Precisa de um servidor Linux para agendar suas tarefas? Veja os planos de VPS a partir de R$ 17,00/mês, no Plano Bronze; confira na loja o que cada plano inclui. Ver planos de VPS
Por que funciona no terminal e não no cron
Quando um comando roda no terminal e falha no cron, o ambiente é a primeira suspeita. Estes são os motivos mais comuns:
- PATH reduzido. O PATH do cron é menor que o do seu terminal. Use o caminho completo dos programas, como
/usr/bin/php. - Caminho relativo. Escreva o caminho completo dos arquivos e das pastas do comando.
- O sinal %. Na crontab, o
%vira quebra de linha. Para usar o símbolo de verdade, escreva\%, como emdate +\%F. - O shell é o sh. O SHELL padrão do cron é
/bin/sh, e não o bash. Se o script usa recursos do bash, coloque#!/bin/bashna primeira linha dele. - Permissão. O arquivo
.shprecisa ser executável:chmod +x script.sh. - Fuso horário. O cron usa o horário do sistema. Veja com
timedatectla linha "Time zone". Para mudar:sudo timedatectl set-timezone America/Sao_Pauloe depoissudo systemctl restart cron. - Última linha. Alguns cron ignoram a última linha da crontab se ela não terminar com quebra de linha. Deixe uma linha em branco no fim.
As tabelas do sistema, /etc/crontab e os arquivos de /etc/cron.d/, têm um campo a mais: o usuário, antes do comando. Não misture esse formato com o da crontab do usuário.
Como saber se a tarefa rodou
No Debian e no Ubuntu, há duas formas de ver os registros do cron:
grep CRON /var/log/syslogsudo journalctl -u cron --since today
Essas linhas indicam que o cron disparou o comando; o que o comando fez só aparece se você guardar a saída. Para isso, mande a saída do script para um log próprio, com >> /home/usuario/logs/tarefa.log 2>&1, e leia o arquivo. Se você não definir MAILTO, a saída do comando vai por e-mail local ao dono da crontab; com MAILTO="", o cron não envia nada.
Uma tarefa que roda no terminal ainda pode falhar no cron. Teste a linha com caminhos completos e mande a saída para um log, porque o log é o lugar onde o motivo da falha costuma aparecer.
Evite duas execuções ao mesmo tempo
Se uma tarefa demora mais que o intervalo entre execuções, a seguinte pode começar antes de a primeira terminar. O flock, que vem no util-linux, ajuda a evitar isso:
*/5 * * * * flock -n /var/lock/minha-tarefa.lock /home/usuario/bin/tarefa.sh
O -n faz o flock sair sem esperar quando a tarefa anterior ainda está rodando. Sem permissão em /var/lock, use um arquivo em /tmp, como /tmp/minha-tarefa.lock.
Usa n8n?
O n8n tem o próprio gatilho de agenda, o Schedule Trigger, dentro dos workflows. Quem já usa n8n pode agendar por lá em vez de pelo cron. O guia Instalar n8n na VPS: passo a passo com Docker mostra a instalação.
Checklist antes de salvar a crontab
- Fiz a cópia com
crontab -l > crontab-backup.txt. - Conferi os cinco campos lendo a linha em voz alta.
- Usei o caminho completo do programa, descoberto com
whichoucommand -v. - Escrevi
\%onde o comando tem o símbolo de porcentagem. - O script tem
chmod +xe, se usa recursos do bash,#!/bin/bashna primeira linha. - Mandei a saída para um log com
>> arquivo 2>&1. - Conferi o fuso com
timedatectl. - Deixei uma linha em branco no fim do arquivo.
- Se a tarefa pode demorar, usei
flock -n.
Quer rodar suas rotinas em um servidor seu? Os planos de VPS começam em R$ 17,00/mês, no Plano Bronze; confira na loja o que cada plano inclui. Conhecer a VPS
Perguntas frequentes
O que significa */5 na crontab?
É um passo de 5 no campo em que aparece. No campo dos minutos, */5 roda a cada 5 minutos. Já */35 roda nos minutos 0 e 35 de cada hora, porque o passo vale dentro do campo.
Como listar e apagar as tarefas do cron?
Para listar, use crontab -l. Para editar e remover linhas, use crontab -e. O crontab -r apaga a tabela inteira sem pedir confirmação, por isso faça a cópia antes.
Meu script roda no terminal e não roda no cron. O que olhar?
Confira o PATH reduzido do cron, os caminhos completos, o % sem barra, o shell /bin/sh, a permissão de execução e o fuso horário. Depois leia o log do script e o journalctl -u cron.
Qual é a diferença entre crontab -e e /etc/crontab?
O crontab -e edita a tabela do seu usuário, com cinco campos de tempo e o comando. O /etc/crontab e os arquivos de /etc/cron.d/ têm um campo a mais, o usuário, antes do comando.
Existe cron no Windows?
Não é o mesmo serviço. No Windows existe o Agendador de Tarefas.