Capítulo 37. Tarefas Automatizadas

No Linux, as tarefas podem ser configuradas para serem executadas automaticamente dentro de um determinado período de tempo, em uma data específica ou quando a média de carga do sistema estiver abaixo de um número especificado. O Red Hat Enterprise Linux vem pré-configurado para executar tarefas importantes do sistema a fim de mantê-lo atualizado. Por exemplo: o banco de dados slocate usado pelo comando locate é atualizado diariamente. Um administrador de sistemas pode usar tarefas automatizadas para executar backups periódicos, monitorar o sistema e rodar scipts personalizados, dentre outras tarefas.

O Red Hat Enterprise Linux vem com diversos utilitários de tarefas automatizados: cron, at e batch.

37.1. Cron

O Cron é um daemon que pode ser utilizado para agendar a execução de tarefas recorrentes de acordo com uma combinação de hora, dia do mês, mês, dia da semana e semana.

O cron assume que o sistema está continuamante ligado. Se o sistema não estiver ligado no momento para o qual a tarefa foi agendada, esta não será executada. Para agendar tarefas de uma ocorrência, consulte a Seção 37.2.

Para usar o serviço cron, é necessário instalar o pacote RPM vixie-cron e o serviço crond deve estar rodando. Para determinar se o pacote está instalado, use o comando rpm -q vixie-cron. Para determinar se o serviço está rodando, use o /sbin/service crond status.

37.1.1. Configurando Tarefas no Cron

O principal arquivo de configuração do cron, /etc/crontab, contém as seguintes linhas:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

As primeiras quatro linhas são variáveis utilizadas para configurar o ambiente no qual as atividades do cron são executadas. O valor da variável SHELL diz ao sistema qual ambiente shell deve usar (neste exemplo, a shell bash), e a variável PATH define a localidade usada para executar comandos. O output das tarefas do cron é enviado por e-mail ao nome do usuário definido na variável MAILTO. Se a variável MAILTO for definida com um campo vazio (MAILTO=""), o e-mail não será enviado. A variável HOME pode ser usada para definir o diretório raíz a ser usado ao executar comandos ou scripts.

Cada linha do arquivo /etc/crontab representa uma tarefa e tem o formato:

minute   hour   day   month   dayofweek   command

  • minute — qualquer número inteiro de 0 a 59

  • hour — qualquer número inteiro de 0 a 23

  • day — qualquer número inteiro de 1 a 31 (deve ser um dia válido se o mês for especificado)

  • month — qualquer número inteiro de 1 a 12 (ou a abreviação do mês em inglês, como jan ou feb)

  • dayofweek — qualquer número inteiro de 0 a 7, onde 0 ou 7 representa o Domingo (ou a abreviação do dia da semana em inglês, como sun ou mon)

  • command — o comando a executar (pode ser um comando como ls /proc >> /tmp/proc ou o comando para executar um script personalizado)

Para qualquer um dos valores acima, pode ser usado um asterisco (*) para especificar todos os valores válidos. Por exemplo: um asterisco no valor mês significa que o comando deve ser executado todo mês segundo as restrições dos outros valores.

Um hífen (-) entre números inteiros especifica um intervalo de números inteiros. Por exemplo: 1-4 significa os números inteiros 1, 2, 3 e 4.

Uma lista de valores separados por vírgulas (,) especifica uma lista. Por exemplo: 3, 4, 6, 8 indica estes quatro números inteiros específicos.

A barra (/) pode ser usada para especificar valores fásicos. O valor de um número inteiro pode ser pulado dentro de um período, inserindo /<inteiro> após o intervalo. Por exemplo: 0-59/2 pode ser usado para definir todo o segundo minuto no campo dos minutos. Valores fásicos também podem ser usados com um asterisco. Por exemplo: o valor */3 pode ser usado no campo do mês para executar a tarefa a cada três meses.

Quaisquer linhas que iniciem com o jogo da velha (#) são comentários e não são processados.

Conforme mostrado no arquivo /etc/crontab, o cron usa o script run-parts para executar os scripts nos diretórios /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly com uma frequência horária, diária, semanal ou mensal, respectivamente. Os arquivos destes diretórios devem ser scripts de linha de comando (shell).

Se uma tarefa cron precisa ser executada com uma frequência que não seja horária, diária, semanal ou mensal, ela pode ser adicionada ao diretório /etc/cron.d. Todos os arquivos deste diretório usam a mesma sintaxe que o /etc/crontab. Consulte o Exemplo 37-1 para ver exemplos.

# record the memory usage of the system every monday 
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh

Exemplo 37-1. Exemplos de crontab

Usuários além do root podem configurar tarefas no cron usando a funcionalidade crontab. Todos os crontabs definidos pelo usuário são armazenados no diretório /var/spool/cron e executados usando o nome do usuário que os criou. Para criar um crontab como um determinado usuário, logue-se como este usuário e digite o comando crontab -e para editar o crontab do usuário usando o editor especificado pelas variáveis de ambiente VISUAL ou EDITOR. O arquivo usa o mesmo formato do /etc/crontab. Ao salvar as alterações do crontab, este é armazenado de acordo com o nome do usuário e gravada no arquivo /var/spool/cron/nome_do_usuário.

O daemon do cron checa quaisquer alterações no arquivo /etc/crontab, no diretório /etc/cron.d/ e no diretório /var/spool/cron a cada minuto. Se qualquer alteração for encontrada, esta será carregada para a memória. Portanto, o daemon não precisa ser reiniciado se um arquivo crontab for alterado.

37.1.2. Controlando Acesso ao Cron

Os arquivos /etc/cron.allow e /etc/cron.deny são usados para restringir acesso ao cron. O formato de ambos arquivos de controle de acesso consiste em um nome de usuário por linha. Espaços em branco não são permitidos em nenhum destes arquivos. O daemon do cron (crond) não precisa ser reiniciado se os arquivos de controle de acesso forem modificados. Os arquivos de controle de acesso são lidos a cada vez que o usuário tentar adicionar ou apagar uma tarefa do cron.

O usuário root pode usar o cron sempre, independentemente dos nomes de usuário listados nos arquivos de controle de acesso.

Se o arquivo cron.allow existe, somente os usuários listados neste poderão usar o cron, e então o arquivo cron.deny será ignorado.

Se o arquivo cron.allow não existe, os usuários listados no cron.deny não poderão usar o cron.

37.1.3. Iniciando e Parando o Serviço

Para iniciar o serviço cron, use o comando /sbin/service crond start. Para parar o serviço, use o comando /sbin/service crond stop. É recomendado iniciar o serviço no momento da inicialização da máquina (boot time). Consulte o Capítulo 21 para obter detalhes sobre o início automático do serviço cron na hora da inicialização.