Mochileiro T.I
Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Crontab – Agende suas tarefas no Linux

O Crontab (abreviação de Cron Table) é um arquivo de configuração utilizado pelo agendador de tarefas Cron do linux. Ele possibilita a execução de scripts, comandos e programas em intervalos predefinidos, como minutos, horas, diários, semanais, mensais, anuais e assim por diante.

O arquivo de configuração Crontab nada mais é que um arquivo de texto com regras definidas para indicar ao Cron quais tarefas em um determinado intervalo de tempo devem ser executadas em segundo plano. Cada usuário pode ter seu próprio arquivo Crontab e o administrador pode configurar tarefas para o sistema todo através do arquivo definido em /etc/crontab.

Como criar e editar o Crontab

Primeiramente vamos editar o arquivo Crontab de seu usuário:

crontab -e

Como resultado, o editor padrão do sistema (normalmente Vim ou Nano) abrirá o nosso Crontab.

Cada linha possui a seguinte estrutura:

MINUTO HORA DIA MÊS DIA-DA-SEMANA COMANDO

Portanto, você deve preencher cada um destes campos separando-os com espaço, respeitando a integridade dos valores:

  • MINUTOS – valores entre 0 e 59
  • HORA – valores entre 0 e 23
  • DIA (do mês) – valores entre 1 e 31
  • MÊS – valores entre 1 e 12
  • DIA-DA-SEMANA – valores entre 0 e 7 (onde 0 e 7 podem representar o domingo)
  • COMANDO – comando a ser executado

Exemplos práticos

Frequentemente precisamos realizar o backup de nossos arquivos pessoais. Desta forma, é muito importante que tenhamos a possibilidade de agendar a cópia se segurança dos arquivos em um intervalo específico de tempo. Nesse sentido, a seguinte linha adicionada ao Crontab realiza esta tarefa todos os dias, à meia-noite:

0 0 * * * tar -czf /backup/$(date +\%F).tar.gz /home/user

Em um ambiente empresarial, pode haver a necessidade em algum momento de agendar uma reinicialização do servidor por diversos motivos. Suponhamos que isso seja feito toda segunda-feira às 3:00 da manhã. Logo, podemos alcançar este objetivo da seguinte forma:

0 3 * * 1 sudo reboot

Por fim, imagine que você tenha um script que verifica se um determinado endereço na internet está ativo e queira executá-lo uma vez por hora. Basta pedir ao Cron execute tal script da seguinte forma:

0 * * * * /home/user/script.sh

Esta configuração indica ao Cron que execute nosso script no minuto 0 de cada hora, em todas as horas, dias, meses e dia da semana.

Especificar tarefas manualmente por vezes é um trabalho cansativo e pode levar a erros principalmente na definição dos intervalos de execução. Para nossa sorte, existe uma maneira visual de fazer isso via web, através do Crontab Generator.

Este gerador é muito útil onde não existe gerenciador de janelas instalado, normalmente em servidores. Caso você utilizar um sistema linux para desktop, existem programas facilitam a criação e edição das tarefas.

Comandos Úteis do Crontab

Com o intuito de facilitar o gerenciamento do Crontab, o comando crontab conta com algumas opções. Por exemplo, para listar todas as tarefas agendadas, utilize a opção -l:

crontab -l

Para remover todas as tarefas, utilize a opção -r

crontab -r

Até mesmo editar o Crontab de outro usuário (necessário root):

crontab -u usuario -e

Logs e Depuração do Crontab

Como nem tudo são flores, em algum momento algo pode dar errado na execução de alguma tarefa. Contudo, temos acesso os logs de execução localizado no syslog (/var/log/syslog). No entanto, como o syslog não armazena apenas os dados do cron, faz-se necessário realizar a filtragem com o comando grep.

cat /var/log/syslog | grep cron

Do mesmo modo, podemos redirecionar a saída de uma tarefa específica para um arquivo específico, tornando a visualização do log bem mais simples. Neste caso, direcionamos a saída do nosso script para o arquivo log.txt:

0 2 * * * /home/user/script.sh >> /home/user/log.txt 2>&1

Conclusão

Conforme visto, o Crontab é uma poderosa ferramenta para automação de tarefas. Assim, ao utilizá-lo corretamente, é possível otimizar processos, evitar tarefas repetitivas e melhorar a eficiência do sistema.

Espero ter ajudado!

Até a próxima!