Agendamento de tarefas no Linux

Setembro 2017

O que é o agendamento das tarefas

O agendamento das tarefas consiste em executar automaticamente uma tarefa (uma aplicação, um comando, etc.) em intervalos de tempo regulares, ou então, em momentos específicos. De um modo geral, este tipo de procedimento é utilizado para automatizar backups, principalmente em momentos em que o sistema está sendo menos solicitado (durante a noite, para os servidores).

Como funciona Cron

Os sistemas de tipo Unix (Linux) possuem uma aplicação (mais exatamente, um daemon) chamada Cron que permite realizar este tipo de serviço.

O Cron se baseia em uma mesa de indexação de tarefas a serem lançadas, assim como o ano, o mês, o dia, a hora e o minuto para executá-lo. O Cron é constituído de um demônio, crond, isto é, um programa residente em memória que lança automaticamente as tarefas em função da mesa cron de um comando:
crontab
que permite editar a mesa com as tarefas a serem agendadas.

O cron (na realidade crond) geralmente se encontra no diretório
/usr/sbin
ou
/sbin
nas distribuições recentes. Para conhecer o lugar do crond na sua distribuição Linux, basta digitar o seguinte comando:

whereis crond

O comando crontab, na verdade, edita um arquivo relativo ao usuário que o executa. Este arquivo se situa no:

/var/spool/cron/crontabs/usuário

Assim, para o o usuário root a mesa cron será armazenada no:

/var/spool/cron/crontabs/root

Sintaxe do Cron

Para editar a mesa cron, basta executar a seguinte tarefa:
crontab -e


Este comando tem por efeito lançar o editor Vi que apresenta a mesa atual (assim, nenhuma é o primeiro lançamento do crontab).

Cada entrada da mesa (cada linha) vai corresponder a uma tarefa a ser executada e é notada da seguinte forma:

mm hh dd MMM DDD tarefa > log

Nesta sintaxe:

mm representa os minutos (de 0 à 59);

hh representa a hora (de 0 à 23);

dd representa o número do dia do mês (de 1 à 31);

MMM representa o número do mês (de 1 à 12) ou a abreviação do nome do mês (jan, fev, mar, abr, etc.);

DDD representa abreviação do nome ou do número correspondente ao dia da semana (0 representa o domingo, 1 representa a segunda feira, etc.).

A tarefa vai representar o comando ou o script shell a ser executado.

log representa o nome de um arquivo no qual é armazenado o jornal das operações. Se a cláusula log não for especificada, cron enviará automaticamente um e-mail de confirmação. Para evitar isto basta
>/dev/null
. Para cada unidade de tempo (minuto/hora/etc.) essas anotações são possíveis:

*: a cada unidade de tempo;

2-5: as unidades de tempo (2, 3, 4, 5);

*/3: todas as três unidades de tempo (0, 3, 6, etc.);

5,8: as unidades de tempo 5 e 8.

Alguns exemplos de utilização

Imaginemos que você queira fazer um jornal (no arquivo /tmp/log_df.txt, por exemplo) automatizado do espaço disco livre (comando df) em intervalos de tempo bem precisos:

Todos os dias as 23h30:

30 23 * * * df >>/tmp/log_df.txt

Todos os primeiros dias do mês as 23h30:

30 23 1 * * df >>/tmp/log_df.txt

Todas as segundas-feiras as 22h28:

28 22 * * 1 df >>/tmp/log_df.txt

Do dia 2 ao dia 5 de cada mês as 10h12:

12 10 2-5 * * df >>/tmp/log_df.txt

Todos os dias pares do mês as 23h59:

59 23 */2 * * df >>/tmp/log_df.txt

É igualmente possível executar automaticamente comandos mais complexos com a ajuda de um script shell. Basta, para começar, criar um script. Em seguida, declarar como tarefa na mesa cron.

O seguinte script shell (que se supõe armazenar em ‘/home/backup’ com o nome ‘backup.cmd’ exportar os registros de MySQL, aquele da mesa ‘ccmusers’, por exemplo) no arquivo cujo nome é ccmusers acompanhado da data sob a forma dia-mês-ano-hora-minuto:

#!/bin/sh  
DATE=$(date +%d-%m-%Y-%H-%M)
/usr/local/mysql/bin/mysqldump -u root ccmusers > /home/backup/ccmusers${DATE}.sql


Assim, para automatizar (cada dia as 23h59) o backup da mesa ccmusers do banco dedados MySQL, basta adicionar a seguinte entrada na mesa cron:
59 23 * * * /home/backup/backup.cmd >>/dev/null

Veja também

Última modificação: 29 de junho de 2017 às 10:58 por ninha25.
Este documento, intitulado 'Agendamento de tarefas no Linux', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.