Domine o Crontab: Agendamento de Tarefas Linux com Exemplos e Ferramentas

últimas postagens

Vamos explorar o universo do crontab, desvendando seus comandos e as diversas operações que ele possibilita.

Descobriremos como agendar tarefas de forma eficiente utilizando o utilitário cron e, adicionalmente, examinaremos algumas ferramentas online que auxiliam na formatação e verificação dos comandos cron.

Origem

O termo “crontab” é uma abreviação de “tabela cron”. A palavra “cron” deriva do termo grego “Chronos”, que significa tempo. O crontab é um processo daemon do sistema, concebido para executar automaticamente tarefas e trabalhos seguindo um cronograma predefinido.

Aplicações Práticas

O crontab demonstra sua utilidade em diversas atividades, como a implementação de backups automatizados, a gestão de arquivos de log, a sincronização de arquivos entre diferentes máquinas e a limpeza de diretórios temporários, entre outros. Embora possa ser empregado em qualquer tipo de tarefa, o crontab se destaca principalmente em tarefas de administração de sistemas.

Através do cron, um administrador tem a capacidade de programar a execução de uma tarefa em um momento e dia específicos.

Vamos agora explorar como configurar essa funcionalidade.

Estrutura do Comando Crontab

O utilitário cron lê arquivos de configuração para processar a lista de comandos. Para decifrar as linhas presentes nas tabelas de configuração do crontab, utiliza-se uma sintaxe específica. O crontab é composto por seis campos, sendo que os cinco primeiros (1-5) definem a data e hora da execução. O sexto campo, por sua vez, pode indicar um nome de usuário ou a tarefa/comando/script a ser executado.

* * * * * NOME_DE_USUÁRIO COMANDO/SCRIPT-A-EXECUTAR

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Dia da semana (0 – 6) (0 é domingo, ou use abreviações como mon, tue, etc.)
│ │ │ |____________ Mês (1 – 12), * indica todos os meses
│ │ |______________ Dia do mês (1 – 31), * indica todos os dias
│ |________________ Hora (0 – 23), * indica cada hora
|___________________ Minuto (0 – 59), * indica cada minuto

Observações:

  • O asterisco (*) serve para indicar todos os valores possíveis em um determinado campo. Por exemplo, um asterisco no campo de hora corresponderia a todas as horas, e um asterisco no campo de mês abrangeria todos os meses.

O nome de usuário é opcional (disponível somente no arquivo crontab do sistema)

Exemplos:

Para melhor compreensão, vejamos alguns exemplos práticos:

0 5 * * * /scripts/job.sh

1. Define um cron para rodar às 5h diariamente.

0 6,18 * * * /scripts/job.sh

2. Programa um cron para executar duas vezes ao dia, às 6h e às 18h.

* * * * * /scripts/job.sh

3. Agendamento de um cron para rodar a cada minuto.

0 19 * * mon /scripts/job.sh

4. Define um cron para ser executado toda segunda-feira, às 19h.

*/10 * * * * /scripts/job.sh

5. Programa um cron para rodar a cada 10 minutos.

* * * feb,jun,oct * /script/job.sh

6. Configura um cron para executar nos meses de fevereiro, junho e outubro.

25 7 4 3 * /home/script/backup.sh

7. Executa o script /home/script/backup.sh no dia 4 de março, às 7h25.

8. Agendamento de um cron para rodar a cada 30 segundos.

  • Como o Crontab não possui controle direto sobre segundos, podemos usar o seguinte método:
* * * * * /home/scripts/script.sh
  • Primeiramente, agendamos uma tarefa para rodar a cada minuto.
* * * * * sleep 30; /home/scripts/script.sh

Em seguida, utilizamos o comando “sleep” para pausar a execução por 30 segundos.

A tarefa acima pausará a execução por 30 segundos e então a retomará.

Tipos de Arquivos de Configuração do Cron

Existem dois tipos principais de arquivos de configuração do Cron:

Crontab do Sistema UNIX/Linux

Este tipo requer privilégios de root e é utilizado para serviços do sistema e tarefas essenciais. O sexto campo (na descrição da sintaxe) especifica o nome do usuário para o qual o comando será executado. Isso permite que o crontab do sistema execute comandos como qualquer usuário.

Crontab do Usuário

Um usuário também pode configurar seus próprios cron jobs através do comando crontab. Aqui, o sexto campo (na descrição da sintaxe) define o comando a ser executado. Todos os comandos são executados pelo usuário que criou o crontab. Cada usuário tem seu próprio arquivo crontab, localizado em /var/spool/cron/crontabs, mas esses arquivos não devem ser editados diretamente. O comando crontab é o método correto para editar ou configurar seus próprios cron jobs.

Como funciona? O serviço cron (daemon) roda em segundo plano e verifica continuamente (a cada minuto) o arquivo /etc/crontab e os diretórios /etc/cron.*/. Ele também monitora o diretório /var/spool/cron/. Os comandos são executados pelo cron

quando os campos de minuto, hora e mês correspondem à hora atual, e pelo menos um dos dois campos de dia (dia do mês ou dia da semana) corresponde ao dia atual.

Comandos Básicos

Listando os Cron Jobs Existentes

crontab -l

É possível listar todos os cron jobs sem acessar o arquivo de configuração, utilizando o comando abaixo:

[[email protected] ~]# crontab -l
no crontab for etechpt.com
[[email protected] ~]#

Se não houver nenhum trabalho programado, a saída será similar a esta:

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

Caso o usuário já tenha configurado alguns jobs, eles serão exibidos conforme o exemplo.

A tabela cron é específica de cada usuário, ou seja, é necessário estar logado com o usuário específico para ver sua lista de cron jobs.

Listando o Cron de um Usuário Específico

Para visualizar os trabalhos agendados de outro usuário, use as opções -u (User) e -l (List).

crontab -u outro_usuario -l

Exemplo: crontab -u etechpt.com -l

Adicionando/Modificando Entradas do Crontab

Para editar entradas do crontab, use a opção -e, conforme abaixo.

crontab -e

O comando abrirá o editor vi, onde você pode inserir os detalhes da tarefa e salvar o arquivo. Uma vez salvo, você pode verificar se o cron está configurado através do comando crontab -l.

Adicionando/Modificando Entradas do Crontab para um Usuário Específico

crontab -u outro_usuario -e

Podemos editar o crontab de outro usuário com o comando abaixo.

Exemplo: crontab -u etechpt.com -e

Removendo Entradas do Crontab

Utilize o parâmetro -r com o comando crontab para remover todas as tarefas agendadas sem confirmação.

crontab -r

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete etechpt.com's crontab?

Se deseja confirmação antes de apagar tarefas agendadas, use a opção -i com -r, que solicitará a confirmação antes da exclusão do crontab do usuário.

Strings Especiais do Crontab

Além da sintaxe já mencionada, podemos utilizar oito strings especiais oferecidas pelo crontab. Elas não só otimizam o tempo, como também melhoram a clareza do código.
String Especial
Descrição
@reboot
Executar uma vez, após a inicialização.
@yearly
Executar uma vez por ano, equivalente a 0 0 1 1 *
@annually
O mesmo que @yearly
@monthly
Executar uma vez por mês, equivalente a 0 0 1 * *
@weekly
Executar uma vez por semana, equivalente a 0 0 * * 0
@daily
Executar uma vez por dia, equivalente a 0 0 * * *
@midnight
O mesmo que @daily
@hourly

Executar uma vez por hora, equivalente a 0 * * * *

Exemplos de Strings Especiais do Crontab

1. Crontab para agendar tarefas anualmente

@yearly /scripts/greeting.sh

O comando acima executará o script de saudação de ano novo no primeiro minuto de cada ano.

2. Crontab para agendar tarefas mensais

@monthly /scripts/cleanup.sh

Com esse comando, podemos executar um script de limpeza no início de cada mês.

Da mesma forma, podemos usar outras strings especiais do crontab para tarefas semanais, diárias e horárias.

Diretórios do Cron

  • O administrador do sistema pode usar um agendamento cron para todo o sistema, localizado nos seguintes diretórios:
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly

/etc/cron.weekly

Exemplos Práticos do Crontab

Vamos analisar alguns exemplos práticos que administradores de sistemas ou profissionais de TI costumam usar.

Remoção de arquivos e diretórios vazios

45 0 * * * etechpt.com find /tmp -type f -empty -delete

A expressão cron acima buscará arquivos e diretórios vazios em /tmp e os removerá. Essa tarefa será executada diariamente às 0h45. É necessário mencionar o nome do usuário que executará a tarefa. No exemplo, o usuário etechpt.com está executando a operação cron.

Executando múltiplas tarefas com um único cron

* * * * * /home/scripts/backup.sh; /home/scripts/scriptp.sh

Várias tarefas podem ser separadas por ponto e vírgula (;) e incluídas em uma única expressão cron.

Ferramentas de Formatação e Teste do Cron

Já discutimos os comandos e sintaxes do crontab para agendar tarefas. Mas e se você não for um administrador de sistema e não trabalhar com o cron frequentemente? Pode ser difícil lembrar da sintaxe, o que pode levar a erros. Mas não se preocupe, há uma solução para isso.

Existem diversas ferramentas de formatação do cron disponíveis online.

# 1. Gerador de Tarefas Cron

Este é um gerador amigável, onde é possível especificar o minuto, dia, e o caminho do script para criar a expressão cron.

Por exemplo, suponha que eu precise executar o script /home/processMonitor.sh a cada 5 minutos, de segunda a sexta.

A sintaxe do cron seria a seguinte, que eu adicionaria ao meu crontab usando
crontab -e:

0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. Easycron

É um agendador de tarefas cron baseado na web. Podemos criar um cron job especificando uma URL para chamar e definindo o horário de execução. Podemos também usar uma expressão cron ou adicionar manualmente através de um formulário. É possível usar a autenticação HTTP básica como camada de segurança.

Além disso, o Easycron pode ser utilizado para outras finalidades, como verificar expressões Cron padrão, logs de execução de tarefas, notificação por e-mail, logs de falhas, etc.

# 3. Gerador Crontab

Outra ferramenta para gerar crontabs. Com ela, também é possível adicionar a opção de salvar a saída do cron em um arquivo ou enviá-la por e-mail.

# 4. Crontab Guru

Este é um editor simples de expressões cron online. Ele também oferece uma forma de monitorar seu cron job. Basta copiar um comando fornecido e anexar ao final da definição do crontab. Caso o cron job falhe ou não inicie, você receberá um e-mail de alerta.

No exemplo abaixo, o job será executado às 04h05, diariamente, em todos os meses e semanas.

# 5. Testador CRON

Ele nos permite testar as definições de data/hora do cron. Em alguns casos, precisamos decifrar a sintaxe de um cron existente para solucionar problemas ou fazer um teste.

Para isso, podemos usar esta ferramenta. Basta copiar e colar nossa expressão cron no campo de definição, selecionar o número de iterações e clicar em Testar para visualizar as datas em que ela será executada.

Vamos verificar a expressão cron 4 3 */2 * *, que deveria rodar às 03:04 (AM) a cada dois dias. Vamos verificar com o testador.

Conclusão

Espero que as informações acima tenham ajudado a compreender melhor o Crontab e a configurar tarefas cron. O agendamento de tarefas via cron é uma das muitas atividades realizadas por um administrador Linux. Se tiver interesse em aprender habilidades avançadas, confira este curso.