Agendando tarefas com Crontab

O Básico de uma Cron Job

Basicamente, você pode criar e ditar uma Cron Job usando diferentes métodos. Neste tutorial, vamos mostrar como você pode fazer isso usando o Terminal do Linux.

Abaixo estão algumas operações básicas que os Cron Jobs podem fazer:

Se você quer editar um arquivo crontab do usuário atual, digite o seguinte comando no seu terminal.:

crontab -e

O resultado que você vai ter é algo como a figura abaixo.

resultado do comando crontab -e no terminal Linux

Como ele usa o vi editor, você pode aprender comandos vi para garantir que você faça as ações corretas.

Se você quer editar um crontab de outro usuário, você pode digitar crontab -u username -e. Tenha em mente que você só pode fazer isso como um root. Isso significa que você precisa digitar ‘sudo su -‘ antes de digitar o comando.

comando crontab -u username -e no terminal de comando

Se você quer remover o arquivo crontab atual do usuário atual, digite o seguinte comando:

crontab -r (não interativo, apaga sem confirmação)

Este é o mesmo que o -r. Contudo, ele oferece ao usuário uma opção de sim/não antes de remover o crontab:

crontab -i (interativo, pergunta se vocês está certo disso)

Se você quer exibir os conteúdos do arquivo crontab no qual você está atualmente logado, digite o seguinte comando no terminal:

crontab -l

Outra operação permite que você veja se existe algum arquivo crontab já criado. Você pode simplesmente digitar crontab -l. Se não tiver nenhum, você vai ver este resultado abaixo.

exemplo do comando crontab -l no terminal do shell

Junto a isso, se você quer ver listas de arquivos crontab de outros usuários, você pode digitar crontab -u username -l como um root.

exemplo do comando crontab -u username -l no terminal de comando do linux

Além de conhecer estas operações básicas, é importante que você aprenda a sintaxe básica também.

Sendo assim, saiba que um arquivo crontab consiste em duas partes: o temporizador de agendamento e o comando. É assim como o comando é escrito.

* * * * * /bin/sh backup.sh
  • O Cron Job ***** /bin/sh backup.sh significa que ele vai executar um backup a cada minuto.
  • 30 18*** rm /home/sydtesting/tmp/* significa que ele vai remover os arquivos tmp de /home/sydtesting/tmp todos os dias às 18:30h.

Vamos ver alguns detalhes extras mais adiante.

Como Escrever uma Sintaxe Cron de Forma Correta

Como mencionamos antes, um arquivo crontab contém 5 campos – cada um é representado por um asterisco – que determinam a data e a hora que certa tarefa é programada para desempenhar repetidamente.

exemplo da sintaxe escrita de uma cron job
  • Minute (Minuto) – é o minuto da hora em que o comando vai rodar, variando de 0 a 59.
  • Hour (Hora) – é a hora em que o comando será executado, variando de 0 a 23.
  • Day of the month (Dia do mês) – é o dia do mês em que o comando vai rodar, variando de 1 a 31.
  • Month (Mês) – é o mês em que o comando será executado, variando de 1 a 12.
  • Day of the week (Dia da semana) – é o dia da semana que você quer que o comando rode, variando de 0 a 7.

Junto a isso, você precisa usar caracteres apropriados em cada arquivo crontab.

  • Asterisco (*) – define todos os parâmetros de agendamento.
  • Vírgula (,) – mantém duas ou mais horas de execução em um único comando.
  • Hífen (-) – determina o intervalo da hora ao definir vários tempos de execução de único comando.
  • Barra inclinada (/) – cria intervalos pré determinados de tempo dentro de um intervalo de tempo específico.
  • Last (L) – tem o propósito específico de determinar o último dia da semana do mês respectivo. Por exemplo, 3L significa a última quarta-feira.
  • Weekday (W) – determina o dia da semana mais próximo de um tempo dado. Por exemplo, 1W significa se o for um sábado, o comando vai ser executado na segunda-feira ().
  • Hash (#) – para determinar o dia da semana, seguido por um número que varia de 1 a 5. Por exemplo, 1#2 significa a segunda segunda-feira.
  • Ponto de interrogação (?) – serve para deixar um espaço.

Exemplos de Sintaxe Cron

+————– minuto (0 – 59)
| +————- hora (0 – 23)
|  | +———– dia do mês (1 – 31)
|  |  | +——— mês (1 – 12)
|  |  |  | +——- dia da semana (0 – 7) (Domingo=0 or 7)
|  |  |  |  |
* * * * * /local/comando e/ou script para executar

Agora que você aprendeu como escrever uma sintaxe cron corretamente, vamos mostrar mais exemplos para ajudar você a entender melhor as regras acima.

Antes de continuar, tenha em mente que a saída do comando vai automaticamente ser enviada para sua conta de email local. Então, se você quer parar de receber esses emails, você pode adicionar >/dev/null 2>&1 à sintaxe. Como no exemplo:

0 5 * * * /root/backup.sh >/dev/null 2>&1

Além disso, se você quer receber a saída de email em uma conta específica, então você pode adicionar MAILTO, seguido do endereço de email. Aqui está um exemplo:

MAILTO="myname@servidordeemail.com"
0 3 * * * /root/backup.sh >/dev/null 2>&1

Abaixo estão mais alguns exemplos de sintaxe Cron:

Expressão Significado
0 0 * * * /bin/sh backup.sh Fazer um backup de banco de dados à meia noite de cada dia.
0 6,18 * * * /bin/sh backup.sh Fazer um backup de banco de dados duas vezes por dia (às 6 da manhã e às 18h da tarde).
0 */6 * * * /scripts/monitor.sh Para fazer monitoramentos a cada 6 horas.
*/10 * * * * /home/user/script.sh Para executar uma tarefa cron para o arquivo do script localizado no diretório home a cada 10 minutos.
0 * 20 7 * /bin/sh backup.sh Para executar um backup de banco de dados a cada hora em 20 de julho.
0 0 * * 2 * /bin/sh Para executar um backup de banco de dados à meia noite de toda terça-feira.
* * * 1,2,5 *  /script/script.sh Para executar um comando em Janeiro, Fevereiro e Maio.
10-59/5 5 * * * /home/user/script.sh Para executar um comando a cada 5 minutos às 5:00h da manhã, começando às 5:10h.
0 8 1 */3 * /home/user/script.sh Para executar um comando trimestralmente no primeiro dia às 8:00h da manhã.
* * * * * /scripts/script.sh; /scripts/scrit2.sh Para definir uma agenda para tarefas múltiplas em um único Cron Job.
@reboot /scripts/script.sh Para executar uma certa tarefa toda vez que você inicia o sistema.
0 0 1 * * /home/user/script.sh Para executar um comando no primeiro dia de cada mês.

Permissões Cron

Dois arquivos possuem um papel importante quando se trata de cron jobs.

  • /etc/cron.allow –se o cron.allow existe, ele deve contar o nome do usuário para o usuário utilizar cron jobs.
  • /etc/cron.deny – se o arquivo cron.allow não existe, mas o arquivos cron.deny existe, então para usar cron jobs o usuário não deve estar listado no arquivo cron.deny.

O Que é Cron Job?

Cron é um programa de utilidade para repetir tarefas numa data futura. Dar um comando que agenda uma tarefa, em um horário específico, repetidamente é um cron job.

Se você quer agendar um job uma única vez, você pode querer usar outro comando. Mas, para jobs recorrentes, o cron é a solução perfeita.

O Cron é um daemon. Isso significa que ele trabalha em plano de fundo para executar tarefas não interativas. No Windows, você pode estar mais familiarizados com processos em plano de fundo com os Serviços.

Um daemon está sempre no status ocioso e aguarda uma solicitação de um comando para desempenhar uma certa tarefa. Essa tarefa pode ser tanto de dentro do computador principal quanto de qualquer outra máquina conectada à mesma rede.

Um arquivo Cron é sempre um arquivo de texto que contém comandos para rodar em uma hora específica. O sistema padrão do arquivo contab é /etc/crontab e ele fica localizado dentro do diretório crontab, que é /etc/cron.*/. Apenas administradores podem editar um arquivo crontab do sistema.

Porém, como os sistemas operacionais Unix têm suporte a múltiplos usuários, cada um pode criar seu próprio arquivo crontab e lançar comandos para executar tarefas em qualquer hora que eles quiserem. Um daemon Cron vai verificar o arquivo e rodar o comando no plano de fundo do sistema.

Com Cron Jobs, você pode automatizar a manutenção do sistema, fazer o monitoramento do espaço de disco, e agendar backups. Por conta da sua natureza, os Cron Jobs são excelentes para computadores que trabalham todos os dias e horas da semana – um servidor.

Só se atenha ao fato de que os Cron jobs são mais usados por administradores de sistemas, sendo também bastante úteis para desenvolvedores. Por exemplo, para desativar uma conta expirada, checar links quebrados ou até mesmo enviar newsletters para usuários específicos.