fbpx Certificação Linux: Comando cron no Linux (agendamento de tarefas) [Guia Básico]

Blog

Comando cron no Linux (agendamento de tarefas) [Guia Básico]

📅 01/01/2019 ⏱ 7 min ✍️ Uira Ribeiro
Linuxcomandos
Comando cron no Linux (agendamento de tarefas) [Guia Básico]

O comando cron no Linux é um serviço que provê o serviço de agendamento de tarefas para os usuários e o sistema. 

Ele permite que um comando, programa ou script seja agendado para um determinado dia, mês, ano e hora. É muito usado em tarefas que precisam ser executadas a cada hora, dia ou qualquer outro período, de forma recorrente.

Geralmente o cron é utilizado para executar arquivamento de logs e checagem da integridade do sistema e outras manutenções periódicas.

As tarefas do sistema que serão executadas são definidas no arquivo /etc/crontab.

Cada usuário também pode ter suas tarefasconfiguradas em arquivos individuais no diretório /var/spool/cron/ com o login da conta do usuário.

O cron possui um utilitário chamado crontab que facilita a visualização e edição dos arquivos do cron.

Para agendar uma nova tarefa, podemos utilizar o comando crontab ou editarmos o arquivo /etc/crontab com qualquer editor de texto e definir quando a tarefa será executada.

O formato que o arquivo de cron usa é:

MINUTOS HORAS DIA MES SEMANA USUARIO COMANDO
Formato do Crontab

Não é necessário reiniciar o serviço do cron porque ele verifica seus arquivos a cada minuto.

O formato de um arquivo crontab segue a seguinte ordem:

Os valores para cada campo podem ser:

Minuto: Valor entre 0 e 59;
Hora: Valor entre 0 e 23; 
Dia do Mês: Valor entre 1 e 31; 
Mês: Valor entre 1 e 12 (identificando os meses de janeiro a dezembro); 
Dia da Semana: Valor entre 0 e 7, sendo que zero ou sete são usados para identificar o domingo. 
Login do Usuário: O usuário que será usado para executar o comando;
Comando: Programa que será executado, mais seus parâmetros normais. 

Cada campo deve ser separado por um ou mais espaços ou tabulações.

O símbolo asterisco “*” pode ser usado para indicar que qualquer data ou hora são válidas. Também é possível especificar intervalos de tempo usando a barra "/". Exemplo "*/5" no campo minutos indica que o comando deve rodar a cada 5 minutos.

É possível especificar intervalos para que o comando seja executado através do hífen “-”, indicando os períodos de execução incluindo o número inicial e final.

Uma lista de horas e datas pode ser feita utilizando a vírgula  “,” para separar os valores. 

Veja alguns exemplos de cron:

Executa o comando sync todo o dia as 10:00:

0   10   *   *   *   root   sync

Executa o comando updatedb toda segunda-feira às 06:00:

0   6   *   *   1   root   updatedb

Executa o comando runq todos os dias a cada vinte minutos:

0,20,40   *   *   *   *   root   runq

Envia um e-mail as 0:15 todos os natais para a carla:

15   0   25   12   *   root   mail carla < natal.txt

Executa o comando poff às 5:30 de segunda à sábado:

30    5   *   *   1-6   root   poff

Executa um script PHP a cada 5 minutos:

*/5   *   *   *   *   root   /usr/bin/php -c /etc/php.ini /home/script.php

Arquivo crontab

O comando crontab comando facilita a edição dos arquivos de configuração do cron. Ele é útil para edição dos arquivos dos usuários localizados em /var/spool/cron/

O crontab salva o arquivo individual do cron com o nome do login do usuário.

Este arquivo tem o mesmo formato do /etc/crontab exceto por não possuir o campo usuário (UID), uma vez que nome do arquivo já tem esta identificação. 

# ls –l /var/spool/cron/tabs-rw———	1	root	root	264	Jun 20 14:36	root-rw———	1	root	users	199	Jun 20 15:58	uira

As opções mais frequentes do crontab são:

  • -e: Edita o arquivo de cron utilizando o editor vi.
  • -l: Lista o conteúdo do arquivo de cron do usuário corrente
  • -r: Remove o arquivo de cron.
  • -u usuário: Realiza uma das operações como se fosse um determinado usuário. Deve ser usada em conjunto com as outras opções e somente o root pode alterar o cron de outros usuários.

Veja os exemplos:

Neste exemplo o comando “/usr/bin/mrtg /etc/mrtg.cfg” é executado a cada 5 minutos e o “/bin/sendip.sh” todos os dias à 01:00am:

$ crontab –l*/5   *   *   *   *   /usr/bin/mrtg /etc/mrtg.cfg0     1   *   *   *   /bin/sendip.sh

Para agendar alguma tarefa no cron, utilize o "crontab –e" para editar o arquivo com o vi:

$ crontab -e

Inclua uma linha em branco no final do arquivo, caso contrário o último comando não será executado. 

Permissões do Cron

O cron possui dois arquivos que habilitam ou desabilitam o seu uso pelos usuários. Dependendo da distribuição, eles podem ter nomes e lugares diferentes. São eles:

/etc/cron.allow

Se o arquivo cron.allow existir, um determinado usuário precisa ter seu login listado no seu conteúdo para ter permissões expressas para o uso do cron.

/etc/cron.deny

Se o arquivo cron.deny existir, os logins listados em seu conteúdo são proibidos de utilizar o cron. Os demais usuários poderão usar o cron.

Se nenhum dos dois arquivos existirem, o uso do cron será permitido para todos os usuários. Se o arquivo cron.deny estiver vazio, todos os usuários terão permissão de usar o cron.

Diretórios Especiais do Cron

/etc/cron.d

O cron também conta com um diretório especial em /etc/cron.d. Este diretório pode conter os arquivos:

  • daily: especifica quais comandos são executados diariamente;
  • hourly: especifica quais comandos são executados de hora em hora;
  • weekly: especifica quais comandos são executados toda semana;
  • monthly: especifica quais comandos são executados todos os meses.

Os arquivos contidos neste diretório deve seguir o formado do /etc/crontab:

# cat /etc/cron.d/sysstat */10 * * * * root /usr/lib64/sa/sa1 1 153 23 * * * root /usr/lib64/sa/sa2 -A

Todos os scripts ou comandos executados são sob a permissão do usuário root.

Os arquivos em /etc/cron.d costumam ter seu nome precedido de um número inteiro maior que zero para ordenar a sua execução

/etc/cron.{daily, hourly, weekly, monthly}

Outras possibilidades que o cron examina são os diretórios /etc/cron.daily/etc/cron.hourly/etc/cron.weekly e /etc/cron.monthly.

Estes diretórios podem conter scripts que serão executados nos intervalos de tempo que cada nome de arquivo especifica.

# ls -l /etc/cron.daily/-rwx------. 1 root root 219 Apr 10  2018 logrotate-rwxr-xr-x. 1 root root 618 Mar 17  2014 man-db.cron-rwx------. 1 root root 208 Apr 10  2018 mlocate

Nestes diretórios os arquivos devem conter scripts com comandos que serão executados, e não um agendamento do que será executado como no crontab.

Veja o exemplo do script logrotate:

$ cat /etc/cron.daily/logrotate #!/bin/sh/usr/sbin/logrotate /etc/logrotate.confexit 0

Outro detalhe importante: os scripts em /etc/cron.{daily, hourly, weekly, monthly} precisam estar com a permissão executável "X" habilitada.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Especialista Linux com mais de 20 anos de experiência.
Autor de 5 livros e mentor de mais de 14.000 alunos certificados.
20 certificações de alto nível, incluindo LPIC-3, CKA, RHCE e AWS Solutions Architect.

WhatsApp