Agendamento de tarefas no linux

Maio 2015

Introdução ao agendamento das tarefas

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

Apresentação de cron

Os sistemas de tipo Unix (então Linux) possuem uma aplicação (mais exatamente um demônio) permitindo realizar este tipo de serviço, trata-se de cron.

Cron está baseado em uma mesa de referenciamento as tarefas a serem lançadas bem como o ano, o mês, o dia, a hora e o minuto para executá-lo.

Cron é constituído:


de um demônio: crond, quer dizer 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 para agendar


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

whereis crond



O comando crontabedita na verdade 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á estocada no:
/var/spool/cron/crontabs/root

Sintaxe de 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 (então nenhuma se se trata do primeiro lançamento de
crontab).

Cada entrada da mesa (cada linha) vai corresponder a uma tarefa para executar e é notado da seguinte forma:

mm hh jj MMM JJJ tarefa > log

Nesta sintaxe :


mm representa os minutos (de 0 à 59)

hh representa a hora (de 0 à 23)

jj 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, ...)

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

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

log representa o nome de um arquivo no qual é estocado o jornal das operações. Se a clausula > 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/...) as 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,...)

5,8: as unidades de tempo 5 e 8

Alguns exemplos de utilização

Imaginemos que se queira fazer um jornal (no arquivo /tmp/log_df.txt por exemplo) automatizada do espaço disco livre (comando df) em intervalos de tempo bem preciso:


Todos os dias às 23h30:

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



Todos os primeiros do mês as 23h30 :
30 23 1 * * df >>/tmp/log_df.txt



Todas as segunda feiras 22h28 :
28 22 * * 1 df >>/tmp/log_df.txt



De 2 au 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, então, primeiramente criar um script. Depois declarar como tarefa na mesa cron.

O seguinte script shell (que supõem-se estocar em /home/backup com o nome backup.cmd exporte os registros de MySQL (aquele da mesa ccmusers por exemplo) no arquivo cujo nome é ccmusers acompanhamento da data sob 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, será suficiente adicionar a seguinte entrada na mesa cron:
59 23 * * * /home/backup/backup.cmd >>/dev/null




Tradução feita por Ana Spadari
Para uma leitura offline, é possível baixar gratuitamente este artigo no formato PDF:
Agendamento-de-tarefas-no-linux .pdf

A ver igualmente

Este documento, intitulado « Agendamento de tarefas no linux »a partir de Kioskea (pt.kioskea.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.