--- Em [email protected], "Lucas Pereira Caixeta" <lpc...@...> 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
