~ / blog / ops
18 set 2026ops10 min de leitura

Cron no Linux e Agendador de Tarefas no Windows

Como agendar jobs em Linux (cron/systemd timers) e no Windows (Task Scheduler), com exemplos equivalentes e armadilhas de produção.

LinuxWindowsautomação

1. Quando agendar vs. fila

Agendamento serve para tarefas periódicas previsíveis (backup, limpeza, relatório). Se o volume varia ou precisa de retry inteligente, prefira fila com worker.

2. Cron e systemd timers

crontab -e
# todo dia às 03:15
15 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
crontab -l

Em servidores modernos, systemd timers costumam ser melhores: logs no journal, dependências e restart controlado.

sudo systemctl enable --now backup.timer
systemctl list-timers

3. Task Scheduler

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3:15am
Register-ScheduledTask -TaskName "BackupDiario" -Action $action -Trigger $trigger -User "SYSTEM"

GUI: taskschd.msc. Prefira conta de serviço com menor privilégio e log em arquivo ou Event Viewer.

4. Equivalências lado a lado

  • Listar jobs: crontab -l / Get-ScheduledTask
  • Logs: journalctl -u backup.service / Event Viewer → Task Scheduler
  • Rodar agora: systemctl start backup.service / Start-ScheduledTask -TaskName BackupDiario
DICA Sempre redirecione stdout/stderr para log com rotação. Job silencioso que falha é incidente atrasado.

5. Checklist de produção

  • Horário em UTC documentado
  • Usuário dedicado, sem senha interativa
  • Log + alerta se o job não rodou
  • Teste manual do script antes de agendar

6. Comandos explicados

Cron e systemd timers

Comando ou trechoO que faz
crontab -eAbre o crontab do usuário atual para editar os agendamentos.
15 3 * * *Cinco campos de tempo. Aqui: minuto 15, hora 3, qualquer dia, mês e dia da semana. Ou seja, todo dia às 03:15.
>> /var/log/backup.logAcrescenta a saída normal do script ao arquivo, sem apagar o que já existe.
2>&1Envia as mensagens de erro para o mesmo destino da saída normal.
crontab -lLista os agendamentos atuais.
systemctl enable --now backup.timerAtiva o timer no boot e já o inicia.
systemctl list-timersMostra os timers, o próximo disparo e o último.
Campo do cronValores
Minuto0 a 59
Hora0 a 23
Dia do mês1 a 31
Mês1 a 12
Dia da semana0 a 7 (0 e 7 são domingo)
ExpressãoQuando roda
*/5 * * * *a cada 5 minutos
0 2 * * 0domingo às 02:00
30 8 1 * *dia 1 de cada mês às 08:30
0 9 * * 1-5de segunda a sexta às 09:00

Agendador de Tarefas (PowerShell)

ComandoO que faz
New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File ..."Define o que executar: o programa e seus argumentos.
New-ScheduledTaskTrigger -Daily -At 3:15amDefine o gatilho: todo dia às 03:15.
Register-ScheduledTask -TaskName "BackupDiario" ... -User "SYSTEM"Cria a tarefa com esse nome, rodando com a conta SYSTEM.

7. Erros comuns e como resolver

SintomaCausa provávelSolução
O script funciona manualmente, mas não pelo cronO cron usa um PATH reduzido e outro diretório de trabalho.Use caminhos absolutos para comandos e arquivos, ou faça cd no início do script.
O job falha e ninguém percebeA saída e os erros não foram registrados.Redirecione com >> arquivo.log 2>&1 e alerte quando o log não for atualizado.
Roda em horário diferente do esperadoO cron usa o fuso horário do servidor.Documente o fuso (de preferência UTC) e confira com timedatectl.
A tarefa do Windows não roda sem ninguém logadoA tarefa foi criada para executar só com o usuário conectado.Registre com uma conta de serviço ou SYSTEM e marque a execução com ou sem login.

Quer aplicar isso ao seu contexto?

Se esse problema existe na sua operação, podemos analisar o cenário em um diagnóstico gratuito de 30 minutos.

solicitar diagnóstico gratuito →

Leia também