Como Agendar Tarefas Programadas em Sistemas Linux e Windows

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,5 para segunda e sexta-feira).
  • -: Especifica um intervalo de valores (ex: 9-17 para das 9h às 17h).
  • /: Define um passo para um intervalo (ex: */15 para 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.

Tags: Linux cron crontab Windows schtasks

Publicado em 6-23 22:52