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.
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
É 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.
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.
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.
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.