Crontab no Linux – com exemplos e ferramentas em tempo real

Publicados: 2015-07-26

Vamos explorar o crontab, seus comandos e várias operações associadas ao Crontab.

Aprenderemos como agendar tarefas usando o utilitário cron e, por último, também discutiremos algumas das ferramentas online que nos ajudam a formatar e testar os comandos cron.

Origem

Crontab significa “ tabela cron ”. A palavra cron foi tirada da palavra grega Chronos que significa tempo. O Crontab é um processo daemon do sistema que executará automaticamente algumas tarefas e trabalhos de acordo com o horário agendado.

Casos de uso

O Crontab é útil para realizar várias operações, como fazer backup automatizado, girar arquivos de log, sincronizar arquivos entre máquinas remotas e limpar pastas temporárias, etc. O Crontab pode ser usado para qualquer tipo de trabalho, mas se torna especialmente útil quando começamos a lidar com tipo de trabalho de administração do sistema.

Usando o cron, um administrador pode agendar um trabalho para ser executado em um horário e dia específicos.

Então vamos ver como podemos configurar isso.

Sintaxe do Crontab

Para executar uma lista de comandos, o utilitário cron lê os arquivos de configuração. Para interpretar as linhas nas tabelas de configuração do crontab , segue uma sintaxe do Crontab. O Crontab possui seis campos, e os primeiros cinco (1-5) campos definem a data e hora de execução. O último campo, ou seja, 6º campo, pode ser um nome de usuário e/ou tarefa /job/command/script a ser executado.

* * * * * USER_NAME COMMAND/SCRIPT-TO-EXECUTE

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Dia da semana (0 – 6) (0 é domingo, ou use nomes)
│ │ │ | ____________ Mês (1 – 12),* significa todos os meses
│ │ | ______________ Dia do mês (1 – 31),* significa todos os dias
│ | ________________ Hora (0 – 23),* significa a cada hora
| ___________________ Minuto (0 – 59), * significa cada minuto

Observações :

  • Asterisco (*) é usado para corresponder a todos os valores possíveis para um campo. Por exemplo, um asterisco usado no campo hora seria equivalente a todas as horas ou um asterisco no campo mês seria equivalente a todos os meses.
  • nome de usuário é opcional (disponível apenas se for o arquivo crontab do sistema)

Exemplos:

Vamos entender a sintaxe acima com alguns exemplos

1. Agende um cron para ser executado às 5h diariamente

 0 5 * * * /scripts/job.sh

2. Agende um cron para ser executado duas vezes por dia às 6h e às 18h

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

3. Agende um cron para ser executado a cada minuto

 * * * * * /scripts/job.sh

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

 0 19 * * mon /scripts/job.sh

5. Agende um cron para ser executado a cada 15 minutos.

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

6. Agende um cron para ser executado nos meses selecionados

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

7. Execute o script de shell /home/script/backup.sh em 4 de março às 7h25

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

8. Agende um cron para ser executado a cada 30 segundos

Como não temos controle sobre segundos no Crontab, podemos alcançá-lo através do processo de duas etapas abaixo.

  • Vamos primeiro agendar uma tarefa que é executada a cada minuto.
 * * * * * /home/scripts/script.sh
  • Agora vamos usar o comando sleep para pausar a execução por 30 segundos.
 * * * * * sleep 30; /home/scripts/script.sh

A tarefa acima interromperá a execução por 30 segundos e será retomada novamente.

Tipo de arquivos de configuração Cron

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

O sistema UNIX/Linux Crontab

Isso requer privilégios de root porque geralmente é usado para serviços do sistema e trabalhos críticos. O sexto campo (na descrição da sintaxe acima) é o nome de um usuário para o comando a ser executado. Ele permite que o crontab do sistema execute comandos como qualquer usuário.

O usuário Crontab

Um usuário também pode instalar seus próprios cron jobs usando o comando crontab. Aqui também, o sexto campo (na descrição da sintaxe acima) é o comando a ser executado, e todos os comandos são executados como o usuário que criou o crontab. Cada usuário pode ter seu próprio arquivo crontab e, embora sejam arquivos em /var/spool/cron/ crontabs, eles não devem ser editados diretamente. Precisamos usar o comando crontab para editar ou configurar nossos próprios cron jobs.

Como funciona?

O serviço cron (daemon) é executado em segundo plano e verifica constantemente (a cada minuto) o arquivo /etc/crontab e os diretórios /etc/cron.*/ . Ele também verifica o diretório /var/spool/cron/ . Os comandos são executados pelo cron quando os campos minuto, hora e mês correspondem à hora atual e pelo menos um dos campos de dois dias (dia do mês ou dia da semana) corresponde ao dia atual.

Comandos básicos

Listando os Cron Jobs existentes

Podemos listar todos os trabalhos Cron sem abrir o arquivo de configuração crontab usando o comando abaixo

 crontab -l

Se não houver nenhum trabalho existente, ele retornará a saída como

 [geekflare@localhost ~]# crontab -l no crontab for geekflare [geekflare@localhost ~]#

Se o usuário já adicionou alguns dos trabalhos, ele será exibido da seguinte forma.

 [geekflare@localhost ~]# 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 am 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) # # mh dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [geekflare@localhost ~]#

A tabela cron é específica do usuário, o que significa que você deve estar logado com um usuário específico para ver a lista da tabela cron.

Listar Cron para um usuário específico

Para listar os trabalhos agendados de outro usuário, use a opção -u ( User ) e -l ( List ).

crontab -u another_username -l

Exemplo : crontab -u geekflare -l

Adicionar/modificar entradas do Crontab

Para editar a entrada crontab, podemos usar a opção -e conforme mostrado abaixo.

crontab -e

O comando acima abrirá os editores vi onde você especifica os detalhes do trabalho e salva o arquivo. Uma vez salvo, você pode verificar se o cron está configurado ou não com crontab -l .

Adicionar/modificar entradas do Crontab para um usuário específico

Podemos editar o crontab para outro usuário usando o comando abaixo

 crontab -u another_username -e

Exemplo : crontab -u geekflare -e

Remover entrada do Crontab

Use o parâmetro <strong>-r</strong> com o Crontab para remover tarefas agendadas completas sem confirmação do crontab

crontab -r

Se você deseja confirmação antes de excluir trabalhos agendados, use a opção <strong>-i</strong> com -r , que solicitará a confirmação do usuário antes de excluir o crontab do usuário.

 crontab -i -r
 [geekflare@localhost ~]# crontab -i -r crontab: really delete geekflare's crontab?

Corda Especial Crontab

Além da sintaxe acima discutida, também podemos usar oito strings especiais fornecidas pelo Crontab. Isso não apenas economizará nosso tempo, mas também melhorará a legibilidade.

Cadeia Especial Descrição
@reboot Execute uma vez, após a inicialização.
@yearly Executar uma vez por ano, ou seja, 0 0 1 1 *
@annually O mesmo que @yearly
@monthly Executar uma vez por mês, ou seja, 0 0 1 * *
@weekly Executar uma vez por semana, ou seja, 0 0 * * 0
@daily Executar uma vez por dia, ou seja, 0 0 * * *
@midnight Igual ao @daily
@hourly Executar uma vez por hora, ou seja, 0 * * * *

Exemplos de Strings Especiais do Crontab

1. Crontab para agendar tarefas anualmente

@yearly /scripts/greeting.sh

Podemos executar acima de um para enviar uma saudação de ano novo, ele será executado no primeiro minuto de cada ano.

2. Crontab para agendar tarefas a serem executadas mensalmente.

@monthly /scripts/cleanup.sh

Podemos executar o acima para realizar algumas atividades de limpeza no início de cada mês.

Da mesma forma, podemos usar outra string especial do Crontab para fins semanais, diários e horários.

Diretório Cron

O administrador do sistema pode usar um agendamento cron para todo o sistema que vem sob o diretório cron predefinido como mostrado abaixo

  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly
  • /etc/cron.weekly

Exemplos em tempo real do Crontab

Vamos discutir alguns dos exemplos em tempo real que um administrador de sistema ou profissionais de TI costumam usar.

Excluir arquivos e diretórios vazios

45 0 * * * geekflare find /tmp -type f -empty -delete

A expressão cron acima encontrará os arquivos e diretórios vazios do diretório /tmp e os excluirá. Este trabalho será executado diariamente às 12h45 . Precisamos mencionar o nome de usuário para realizar este trabalho. No exemplo acima, o usuário geekflare está realizando uma operação de cron job.

Execute várias tarefas usando um único cron

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

Várias tarefas/trabalhos podem ser separados usando um ponto e vírgula ( ; ) e podem ser atribuídos a uma única expressão cron.

Ferramentas de formatação e teste Cron

Até agora discutimos os comandos e a sintaxe do crontab para agendar uma tarefa. Mas e se você não for um administrador de sistema e seu trabalho não for configurar o Cron regularmente, pode não ser possível lembrar a sintaxe e isso abre espaço para erros. Não se preocupe, temos uma solução para este problema.

Existem várias ferramentas de formatação Cron disponíveis online.

# 1. Gerador de tarefas cron

O Cron Job Generator é uma GUI muito amigável, onde você pode especificar o minuto, os dias e o caminho do script para gerar o crontab.

Vamos dar um exemplo em tempo real onde eu tenho que executar /home/processMonitor.sh a cada 5 minutos de segunda a sexta.

Então, eu tenho a sintaxe do Cron abaixo, que posso colocar no meu crontab executando

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

# 2. Easycron

Easycron é um útil agendador de tarefas cron baseado na web. Podemos criar um cron job especificando uma URL para chamar , podemos definir a hora em que ele deve ser executado. Também podemos especificar uma expressão cron ou adicioná-la manualmente a partir de um formulário descritivo. É importante ressaltar que, opcionalmente, podemos usar a autenticação HTTP básica para uma pequena camada de segurança.

Não apenas isso, mas o Easycron também pode ser usado para alcançar outros propósitos, como expressão Cron padrão, logs de execução de tarefas Cron, notificação por e-mail, logs de falhas separados, etc.

# 3. Gerador Crontab

O Crontab Generator é outra ferramenta útil para gerar crontab e, com esta ferramenta, você também pode adicionar se deseja salvar a saída do cron no arquivo ou enviá-lo por e-mail.

# 4. Crontab Guru

Crontab Guru é um editor de expressão de agendamento cron online simples. Além disso, ele fornece um meio útil de monitorar seu cronjob. Tudo o que precisamos fazer é copiar um comando fornecido e anexar no final da definição do crontab. Caso o cron job falhe ou nem inicie, você receberá um e-mail de alerta.

No exemplo abaixo, o Job será executado às 04:05 , todos os dias, todos os meses e todas as semanas.

# 5. Testador CRON

O CRON Tester nos permite testar as definições de data/hora do cron. Pode haver uma situação em que tenhamos que decodificar a sintaxe cron existente para solucionar problemas ou apenas querer fazer um teste.

Para isso, podemos usar esta ferramenta. Tudo o que precisamos fazer é copiar e colar nossa expressão cron no campo de definição do cron, depois escolher o número de iterações e clicar em Testar para ver as várias datas em que ela será executada.

Vamos verificar uma de nossas expressões cron 4 3 */2 * * que deve ser executada às 03:04(AM) a cada dois dias. Vamos verificá-lo com o testador cron.

Conclusão

Espero que o acima ajude você a entender melhor o Crontab e configurar tarefas cron. Agendar trabalhos por meio do Cron é uma das muitas tarefas executadas pelo Linux Admin. Se você estiver interessado em aprender as habilidades avançadas, confira este curso.