A automação de tarefas é fundamental para a manutenção eficiente de sistemas. Este guia aborda como configurar execuções programadas tanto em ambientes Linux, utilizando o serviço cron, quanto em sistemas Windows, através da ferramenta de linha de comando schtasks.
Agendamento de Tarefas no Linux com Cron
No Linux, a ferramenta padrão para agendar tarefas recorrentes é o cron. O serviço cron é geralmente pré-instalado na maioria das distribuições e permite a execução de comandos ou scripts em intervalos predefinidos.
Estrutura de um Crontab
Cada linha no arquivo crontab de um usuário representa uma tarefa agendada. A sintaxe é composta por seis campos que definem a frequência e o comando a ser executado:
minuto hora dia_do_mês mês dia_da_semana comando_a_executar
- minuto: (0-59)
- hora: (0-23)
- dia_do_mês: (1-31)
- mês: (1-12)
- dia_da_semana: (0-7, onde 0 ou 7 é domingo)
- comando_a_executar: O caminho completo para um executável ou script, incluindo seus argumentos.
Caracteres especiais:
*: Corresponde a qualquer valor para o campo.,: Usado para listar valores múltiplos (ex:1,5para segunda e sexta-feira).-: Especifica um intervalo de valores (ex:9-17para das 9h às 17h)./: Define um passo para um intervalo (ex:*/15para a cada 15 minutos).@reboot: Executa uma vez na inicialização do sistema.- Atalhos como
@yearly,@annually,@monthly,@weekly,@daily,@hourly: Simplificam frequências comuns.
Exemplos de Agendamentos Comuns
0 22 * * * /usr/sbin/apachectl restart # Reinicia o serviço Apache todos os dias às 22:00.
0 1,13 * * 1-5 /opt/backup/daily_backup.sh # Executa um script de backup em dias de semana (segunda a sexta) às 01:00 e 13:00.
*/15 * * * * /usr/bin/curl -s http://localhost/healthcheck # Realiza uma requisição de health check HTTP a cada 15 minutos.
0 0 1 * * /usr/bin/find /tmp -type f -mtime +7 -delete # No primeiro dia de cada mês, à meia-noite, apaga arquivos temporários mais antigos que 7 dias no diretório /tmp.
Gerenciamento Básico do Crontab
Comandos essenciais para interagir com o cron e suas tarefas agendadas:
# systemctl status cron # Verifica o status atual do serviço cron.
# systemctl start cron # Inicia o serviço cron.
# systemctl stop cron # Para o serviço cron.
# systemctl restart cron # Reinicia o serviço cron.
# crontab -l # Lista as tarefas agendadas configuradas para o usuário atual.
# crontab -e # Abre um editor de texto para editar as tarefas agendadas do usuário atual.
# crontab -r # Remove todas as tarefas agendadas do usuário atual.
Habilitando Logs do Cron
Para monitorar a execução das tarefas e depurar possíveis problemas, é recomendável habilitar o registro de logs do cron. Isso geralmente é feito configurando o rsyslog:
# sudo vim /etc/rsyslog.d/50-default.conf
Descomente ou adicione a linha que direciona os logs do cron para um arquivo específico:
cron.* /var/log/cron.log
Após a modificação, reinicie o serviço rsyslog para que as alterações entrem em vigor:
# sudo service rsyslog restart
Você pode então acompanhar os logs em tempo real com tail -f /var/log/cron.log.
Configurando uma Nova Tarefa
Para adicionar uma nova tarefa, utilize o comando crontab -e. É fundamental usar caminhos absolutos para os executáveis e scripts, pois o ambiente do cron pode não ter as mesmas variáveis de PATH do seu shell interativo.
# crontab -e
Adicione uma linha como o exemplo abaixo para um script Python que processa dados, executando diariamente às 03:00 AM:
0 3 * * * /usr/bin/python3 /home/usuario/scripts/data_processing.py
Se o script depender de um diretório de trabalho específico, você pode mudar o diretório antes de executá-lo:
@daily cd /home/usuario/project_dir && /home/usuario/project_dir/run_job.sh
Ao salvar o arquivo crontab, as alterações são aplicadas automaticamente.
Agendamento de Tarefas no Windows com schtasks
No sistema operacional Windows, a ferramenta de linha de comando schtasks oferece uma maneira robusta de criar, modificar, consultar e excluir tarefas programadas, funcionando de forma aáloga ao cron no Linux.
Obtendo Ajuda
Para explorar todas as funcionalidades do schtasks e seus parâmetros, use o comando de ajuda geral:
C:\> schtasks /?
Para obter informações detalhadas sobre um subcomando específico, como a criação de tarefas:
C:\> schtasks /Create /?
Consultando Tarefas Existentes
Para visualizar todas as tarefas agendadas atualmente no sistema, utilize o parâmetro /query, que pode ser formatado para melhor legibilidade:
C:\> schtasks /query /fo LIST
Este comando listará as propriedades de cada tarefa em um formato de lista detalhado, incluindo nome, status e próximo horário de execução.
Criando uma Tarefa Programada
O comando schtasks /create é utilizado para configurar novas tarefas. Alguns dos parâmetros mais importantes são:
/TN <NomeDaTarefa>: Define um nome único para a tarefa programada./TR <CaminhoDoExecutavel>: Especifica o caminho completo do programa, script ou comando a ser executado./SC <TipoDeAgendamento>: Define a frequência da execução (ex:MINUTE,HOURLY,DAILY,WEEKLY,MONTHLY,ONCE,ONLOGON,ONSTART)./ST <HoraDeInicio>: Define a hora de início no formato HH:mm (24 horas)./SD <DataDeInicio>: Define a data de início no formato YYYY/MM/DD./D <Dia>: Para agendamentos semanais ou mensais, especifica o dia da semana (MON, TUE, etc.) ou o dia do mês (1-31).
Exemplo: Criar uma tarefa para executar um script PowerShell de geração de relatório mensal, no primeiro dia útil de cada mês, às 08:00 AM.
C:\> schtasks /create /tn "GerarRelatorioContabil" /tr "powershell.exe -File C:\Scripts\gerar_relatorio.ps1" /sc monthly /st 08:00 /d MON,TUE,WED,THU,FRI
Exemplo: Agendar uma limpeza diária de arquivos temporários às 02:00 AM.
C:\> schtasks /create /tn "ManutencaoDiariaTemp" /tr "cmd.exe /c \"del /q C:\\Temp\\*\"" /sc daily /st 02:00
Gerenciando Tarefas
Para consultar os detalhes de uma tarefa específica:
C:\> schtasks /query /tn "GerarRelatorioContabil" /fo LIST
Para excluir uma tarefa existante:
C:\> schtasks /delete /tn "ManutencaoDiariaTemp" /f
O parâmetro /f (force) pode ser usado para suprimir a soilcitação de confirmação da exclusão.