Skip to content

Tag-icone-mini.png Implantação

As vezes é necessário agendas procedimentos de banco para que tarefas sejam executadas de tempos em tempos.
Para isso, existem os seguintes recursos:

Em Oracle, os JOBs.

Em PostgreSQL (Linux), os CRONs.

JOB ​

O JOB é um procedimento de banco que é agendado no momento de sua criação.
Ou seja, cada tarefa tem seu próprio procedimento ou função.
O próprio Oracle fica responsável por executar os procedimentos.

A criação dele fica no arquivo de SCRIPT executado pelo Wizard.
Nele, os programadores predefiniram uma ordem para que eles sejam executados de maneira encadeada a partir da meio-noite.

No script compilado ele fica no arquivo:
\SCRIPT*.SQL

Nos fontes do sistema, ele fica em:
\ansi\view\job\CRIAJOB.SQL

CRON ​

Como o PostgreSQL não possui recurso de JOB, é necessário utilizar o agendamento de tarefas do Linux.

Criando Agendamentos ​

Para realizar o agendamento de Jobs no Linux é necessário a criação de dois arquivos um ".sh" com o comando de conexão e um ".sql" com os comandos a serem executados.

"AjustarDataFinalValidadePromocao.sh" /usr/local/pgsql/bin/psql -U TOTALI -f /root/AjustarDataFinalValidadePromocao.sql totali

"AjustarDataFinalValidadePromocao.sql" SELECT Job_AjustarDataFinalValidadePromocao();

Exemplo de Agendamento de Tarefas do Linux ​

00 00 * * * /bin/sh backupdiario.sh 00 01 * * * /bin/sh vacuumdiario.sh 00 02 * * * /bin/sh jobs.sh 00 02 * * * /bin/sh AjustarDataFinalValidadePromocao.sh 20 02 * * * /bin/sh reindexdiario.sh 10 03 * * * /bin/sh cleanup.sh 00 04 * * * /bin/sh customedio.sh 00 8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /bin/sh financ.sh 15 8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /bin/sh financ.sh 30 8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /bin/sh financ.sh 45 8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /bin/sh financ.sh

Agendamento de Tarefas do Linux ​

O agendamento das tarefas é feita através do arquivo de configuração localizado no diretório /etc/crontab ou em arquivos de usuários localizados em /var/spool/cron/crontabs/[nome do usuário].

Para adicionar uma tarefa ao cron é preciso que você edite o arquivo /etc/crontab e agendar, definindo o mês/dia/hora em que o comando devera ser executado.
Para que a ferramenta cron funcione não é necessário reiniciar o Linux.

Formato do comando a ser executado:

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

31 18 1 * * root run-parts --report /etc/cron.montly | | | | | | | | | | | | | \_Comando que será executado | | | | | | | | | | | \_ UID que executará o comando | | | | | | | | | \_ Dia da semana (0-7) | | | | | | | \_ Mês (1-12) | | | | | \_ Dia do Mês (1-31) | | | \_ Hora | \_ Minuto

Onde corresponde:

Thumb 1204771513.tabela1.JPG

Na opção que corresponde ao dia da semana pode ser utilizado as 3 primeiras letras em inglês (SUN,MON,TUE,WED,THU,FRI,SAT).

Outras Considerações ​

Você pode executar tarefas de hora em hora, diariamente, semanalmente e mensalmente, simplesmente colocando seus arquivos dento dos diretório respectivos /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /cron.monthly.

Veja um exemplo: dentro de "/etc/cron.daily/" tenho um arquivo backup, onde tenho o script de backup do meu sistema, ou seja, no meu caso ele ira fazer backup todos os dias as 12:20.
Obs.: é necessário que esse arquivo tenha permissão para execução, e para isso basta executar o comando: "chmod +x /etc/cron.daily/backup".

Os campos que não for se importar, pode ser colocado um "*", como se tivesse selecionado "todas as possibilidades", sendo que podem ser colocado "-" (hífen) para determinar os intervalos de execução.
A "," (vírgula) define uma lista valores, lista de opções com os números (1,3,5).

O arquivo que é gerado pelo cron em no diretório do usuário '/var/spool/cron/crontabs/[usuário]' pelo crontab tem o mesmo formato do /etc/crontab, exceto por não possuir o campo 'usuário (UID)', pois o nome do arquivo já identifica o usuário no sistema.

Caso você queira editar um arquivo de usuário feito pelo cron, basta utilizar o comando "crontab -e", ele irá abrir o que foi agendado para aquele usuário.

Cuidado, caso você edite o "crontab", certifique-se para que haja uma linha em branco no final do arquivo, caso esta linha não exista o ultimo comando não se executará.
E tenha multa atenção ao colocar qualquer texto após o programa que será executado será considerado comentário e não será interpretado pelo cron.

Alguns exemplos de comandos ​

1. Para rodar todo dia de hora em hora:

00 * * * * script

2. Para rodar de dez em dez minutos todos os dias:

00-59/10 * * * * script

Note a divisão por 10 do intervalo 00-59.

3. Para rodar uma seqüência de horas:

20 10,12,16,18,22 * * * script

4. Para rodar numa seqüência de dias do mês às 14:00:

00 14 03-15 * * script

5. Para rodar ao meio-dia e a meia-noite de terça a sábado:

00 00, 12 * * 2-6 script

6. Para enviar um e-mail as 20:20 no dia 23/03 para Pedro dizendo "Viva o Linux porque nós amamos a liberdade!":

20 20 23 3 * root echo "Viva o Linux porque nós amamos a liberdade!"|mail Pedro

Fontes Externas ​

Copiado de <http://www.vivaolinux.com.br/artigo/Agendando-tarefas-em-Linux-Unix-usando-o-cron/>