[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Ajuda com script - Urgente =/
From: |
Cristiano Ferrari |
Subject: |
Re: Ajuda com script - Urgente =/ |
Date: |
Sun, 14 Dec 2008 12:30:57 -0000 |
User-agent: |
eGroups-EW/0.82 |
--- Em address@hidden, "Lucas Pereira Caixeta"
<lpcnew@...> escreveu
> Pegunta, como eu poderia fzr um programa para pegar dados de um sistema
> sempre da semana anterior??
> tipo, se eu roda-lo segunda ele pega os dados da segunda-sexta passada.
>
> Terei que fzr um script que jogue a query para execução 1 vez por
semana...
Antes de tudo, termos como "URGENTE", "SOCOOORRO" e assemelhadas
demonstrações de desespero não são bem vindas em listas, fóruns,
grupos de discussão, etc. A idéia destes lugares é a ajuda mútua,
gratuita e baseada na boa vontade. Pedir urgência, quando se pede um
favor, soa, ao mínimo, rude. Urgência se pede quando está se pagando,
e bem.
Além do mais, as melhores cabeças geralmente ignoram posts deste tipo
e, portanto, usá-los acaba sempre tendo efeito contrário.
Voltando ao seu problema, vamos por partes.
Para rodar o script "eternamente" uma vez por semana, basta agendá-lo
no cron, incluíndo uma referência à sua execução no arquivo
/etc/crontab. O layout do arquivo é praticamente auto-explicativo, mas
se tiver dúvidas, leia o man page.
Para pegar os dados da semana você pode, antes de rodar a query, criar
variáveis de definam a data de início e fim do período de referência.
Já que o script será executado sempre no mesmo dia da semana, você
sempre estará a uma quantidade de dias constante distante dos dias que
representam o início e o fim da semana. Por exemplo, se sua semana vai
de segunda a sexta, e o script roda toda segunda, no dia da execução
você estará a 3 dias do fim da semana anterior (a sexta) e a 7 dias do
início daquela semana (a segunda passada).
Então, nesta situação, basta que ao definir as variáveis você retroaja
7 dias na data do sistema para a data de início do período de
referência da query e 3 dias do seu final.
O próprio Júlio que você sitou postou em 2004 dois scripts para
converter datas em números seriais e números seriais em datas, que
permitem você fazer contas com elas facilmente em shell.
O link está aqui:
http://br.groups.yahoo.com/group/shell-script/message/10530?viscount=100
Mas, como você se declarou newbie (e não há nada de errado nisso),
talvez tenha alguma dificuldade em compreender a lógica dos scripts.
Para resolver de imediato seu problema (recomendo você a não se
acomodar e desistir de compreender os scripts do Júlio) você pode
recorrer a uma solução mais simples, que é usar o comando date e a
opção -d, que permite você receber uma data que não seja a corrente do
sistema.
Por exemplo,
date -d '-3 days'
e
date -d '-7 days'
irão te ajudar a definir com facilidade as datas de início e fim.
Você precisará ainda informar ao date a máscara correta a retornar a
data, de acordo com o formato exigido pelo seu banco de dados (ano com
2 dígitos ou com 4, dia/mês ou mês/dia, etc...).
Feito isso, é só montar passar a query para o binário que a executa,
com as variáveis no lugar dos parâmetros das datas, que o shell se
encarrega de fazer a expansão e substituí-la pelo conteúdo correto.
Abraço
Cristiano