Kioskea
Pesquisar

Linux - Agendamento de tarefas

Março 2015

Introdução ao agendamento das tarefas


O agendamento das tarefas consiste em executar automaticamente uma tarefa (uma aplicação, um comande...= 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 das tarefas para agendar



cron (na realidade crond)encontra-se geralmente no diretório /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) correspondente 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,...)
  • tarefa representa 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 (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 de MySQL, bastará adicionar a seguinte entrada na mesa cron:
59 23 * * * /home/backup/backup.cmd >>/dev/null



Inspirado no artigo de Linux Magazine
Artigo original publicado por CCM
Tradução feita por Ana Spadari

Para uma leitura offline, é possível baixar gratuitamente este artigo no formato PDF:
Linux-agendamento-de-tarefas.pdf

A ver igualmente

Este documento, intitulado « Linux - Agendamento de tarefas »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.