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 tarefas, configuradas 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.cfg
0 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 1
53 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.conf
exit 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
Tag:/dev, bash, certificação, certificaçãolinux, code, Comptia, developer, empreendedorismo, exame, freesoftware, gnu, hack, Linux, linuxfan, linuxfun, linuxmint, lovelinux, LPI, LPIC, management, nerd, opensource, php, prova, shell, software, softwarelivre, sql, tech, ti, unix