Base de Conhecimento

Como usar crontab: agende tarefas na VPS Linux

  • como usar crontab, cron, crontab, vps, tutorial
  • Usuários acharam útil: 0

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

Arte da Eleven Host: janela de terminal com o título: Como usar crontab: agende tarefas na VPS Linux

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 -e edita a sua tabela. Na primeira vez, o sistema pode perguntar qual editor usar.
  • crontab -l lista as tarefas salvas.
  • crontab -l > crontab-backup.txt salva 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 sun e mon.

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.
  • */2 ou 0-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 que 0 * * * *.
  • @daily: o mesmo que 0 0 * * *.
  • @weekly: o mesmo que 0 0 * * 0.
  • @monthly: o mesmo que 0 0 1 * *.
  • @yearly ou @annually: o mesmo que 0 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 em date +\%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/bash na primeira linha dele.
  • Permissão. O arquivo .sh precisa ser executável: chmod +x script.sh.
  • Fuso horário. O cron usa o horário do sistema. Veja com timedatectl a linha "Time zone". Para mudar: sudo timedatectl set-timezone America/Sao_Paulo e depois sudo 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/syslog
  • sudo 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 which ou command -v.
  • Escrevi \% onde o comando tem o símbolo de porcentagem.
  • O script tem chmod +x e, se usa recursos do bash, #!/bin/bash na 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.

Esta resposta lhe foi útil?

Artigos Relacionados