Agendar tarefas

<< Click to Display Table of Contents >>

Navigation:  Linux >

Agendar tarefas

Previous pageReturn to chapter overviewNext page

O que é cron

O cron pode ser interpretado como um serviço do Linux que é carregado durante o processo de boot do sistema. Trata-se de uma ferramenta que permite programar a execução de comandos e processos de maneira repetitiva ou apenas uma única vez.

Isso é possível porque o daemon (uma espécie de programa que executa tarefas em segundo plano) do cron executa os comandos nas datas e horários especificados. A cada minuto o cron é acionado para verificar se há tarefas a serem realizadas.

Para executar as tarefas, o cron usa uma espécie de tabela conhecida como crontab. O arquivo crontab geralmente fica localizado no diretório /etc, mas também pode estar em um diretório que cria um crontab para cada usuário do sistema, geralmente em /var/spool/cron/

Como usar o cron

O primeiro passo é abrir o crontab. Para isso, você pode usar editores de textos como vi e o emacs. Também é possível digitar o comando "crontab -e" para editar o arquivo exclusivo de seu usuário. Neste caso, a edição é feita como se você estivesse usando o vi.

O crontab tem o seguinte formato:

[minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando] 

 

O preenchimento de cada campo é feito da seguinte maneira:

Minutos: informe números de 0 a 59;

Horas: informe números de 0 a 23;

Dias do mês: informe números de 0 a 31;

Mês: informe números de 1 a 12;

Dias da semana: informe números de 0 a 7;

Usuário: é o usuário que vai executar o comando (não é necessário especificá-lo se o arquivo do próprio usuário for usado);

Comando: a tarefa que deve ser executada.

Repare que a ordem desses valores indica o nome correspondente do campo. Por exemplo, no campo mês, 1 a 12 quer dizer de "Janeiro a Dezembro". No caso de dias da semana, 0 a 6 quer dizer de "Domingo a Sábado". Note que o número 7 também pode ser usado. Neste caso, assim como o número 0, o 7 equivale ao dia de "Domingo".

No lugar desses valores, você pode informar * (asterisco) para especificar uma execução constante. Por exemplo, se o campo dias do mês conter *, o comando relacionado será executado todos os dias.

Você também pode informar intervalos no preenchimento, separando os números de início e fim através de - (hífen). Por exemplo, se no campo horas for informado 2-5, o comando relacionado será executado às 2, 3, 4 e 5 horas. E se o comando tiver que ser executado às 2 horas, entre 15 e 18 horas e às 22 horas? Basta informar 2,15-18,22. Nestes casos, você separa os parâmetros por vírgula.

Vamos a um exemplo:

# tarefa 1

30 22 2,10 * * echo "Porque nós amamos a liberdade"

 

Neste exemplo, a frase "Porque nós amamos a liberdade" é exibida às 22 horas e 30 minutos, nos dias 2 e 10, em todos os meses e em todos os dias da semana. Repare na linha "#tarefa 1". Trata-se de um comentário. Digite # e tudo o que for digitado na linha não será considerado pelo cron. É um recurso útil para inserir descrições quando se tem várias tarefas a serem executadas.

Como agendar um vacuum do Postgres para rodar todo dia a meia noite:

o comando no prompt para rodar um vacuum é

vacuumdb -v -z -U postgres -d (nome da base)

 

Assim, no arquivo crontab fica assim:

 

# tarefa de efetuar vaccum todos os dias a meia noite - na base gestor:

0 0 * * * root /var/lib/pgsql/bin/vacuumdb -v -z -d gestor -U postgres > /pasta/vacuum.log 2> /pasta/erros.log

 

# tarefa de efetuar vaccum todos os sábados, ao meio dia em todas as bases:

0 12 * * 6 root /var/lib/pgsql/bin/vacuumdb -v -z -a -U postgres > /pasta/vacuum.log 2> /pasta/erros.log

 

Sintaxe do vacuumdb

vacuumdb é um programa que fica no diretório bin do PostgreSQL. Os parâmetros:

 

Parâmetro

Descrição

-z

Efetua um analyze para atualizar informações para o otimizador do PostgreSQL

-v

Verbose, mostra um monte de informação

-a

Todas as databases disponíveis neste servidor

-d base

Especifica uma database

-U user-name

Loga usando este usuário

arquivo

Local onde irá gravar a saída do verbosa

2arquivo

Local onde irá gravar a saída de erros

 

Como saber se determinada tarefa está rodando?

Consulte o arquivo de log:

/var/log/cron

 

Filtrando o arquivo de log para ver só o que contém vacuum

cat /var/log/cron | grep "vacuum" 

 

Você pode agendar este comando para lançar isto filtrado em um arquivo texto

0 0 * * * root cat /var/log/cron | grep "vacuum" >> /home/market/vacuum.log