Enviado em 11/05/2012 - 12:01h
Tenho uma rotina que roda em background no cron. A dita entra a cada 60 minutos, ou de hora em hora.
Preciso criar um "[*****]ômetro" ou cronômetro regressivo que dentro do loop precisa ir regredindo até quando faltarem 2 minutos para a nova entrada do cron.
Pegar o momento em que o cron é disparado eu sei, o problema é como criar esta variável para ir decrementando seu valor até faltarem 2 minutos.
Já andei pesquisando sobre o assunto, mas só encontrei bons tutoriais sobre o cron:
http://www.vivaolinux.com.br/dica/Agendamento-de-tarefas-no-Linux-%28cron-e-at%29
http://www.vivaolinux.com.br/artigo/Agendando-tarefas-em-Linux-Unix-usando-o-cron
Tem de tudo, até como retirar o serviço do ar. Mas não encontrei nada referente a cronômetros regressivos.
O script que estou rodando é super pesado e faz gravações e leituras intermitentes. Costuma deixar a memória meio suja e descarregar o danado é importante. Ele chama em bg outros 200 a 500 serviços. Depende do momento e da hora. Percebi que descarregar eles da memória dentro de um período de 60 minutos será suficiente para evitar gargalos.
O que estou imaginando é mais ou menos assim.
Dentro do loop while principal, fazer uma chamada para um função que vai verificar o tempo decorrido desde o momento que foi iniciado. Deverá ler algum parâmetro que indicará o tempo ou contador para sair do ar. Se este número for inferior ao parâmetro x ou y, deverá disparar as rotinas de encerramento que vai providenciar várias limpezas.
A ideia é que acabe tudo antes que o novo cron entrar no ar. Lembrando que ele entra a cada 60 minutos.
Estou bem perdido pra falar a verdade em como devo fazer esta rotina regressiva.
Estou pensando em converter a data para segundos desde 1970 ( date "+%s" que devolve 1336748357) , onde imagino que seja meu start. Agora qual o valor futuro com 60 minutos a frente ?
Qual a melhor forma de fazer estes contadores ? O caminho seria este mesmo ?
Sugestões, todas bem-vindas ;)
Editado: 12:05
Algo similar ao tratado aqui: http://www.vivaolinux.com.br/topico/Shell-Script/Script-para-marcar-tempo
Editado: 12:12
A dica do @fdmarp deu uma luz, mas ainda não é o que preciso. Nem sempre será de 60 minutos. Estou dando este exemplo com 60 minutos.
Preciso criar um "[*****]ômetro" ou cronômetro regressivo que dentro do loop precisa ir regredindo até quando faltarem 2 minutos para a nova entrada do cron.
Pegar o momento em que o cron é disparado eu sei, o problema é como criar esta variável para ir decrementando seu valor até faltarem 2 minutos.
Já andei pesquisando sobre o assunto, mas só encontrei bons tutoriais sobre o cron:
http://www.vivaolinux.com.br/dica/Agendamento-de-tarefas-no-Linux-%28cron-e-at%29
http://www.vivaolinux.com.br/artigo/Agendando-tarefas-em-Linux-Unix-usando-o-cron
Tem de tudo, até como retirar o serviço do ar. Mas não encontrei nada referente a cronômetros regressivos.
O script que estou rodando é super pesado e faz gravações e leituras intermitentes. Costuma deixar a memória meio suja e descarregar o danado é importante. Ele chama em bg outros 200 a 500 serviços. Depende do momento e da hora. Percebi que descarregar eles da memória dentro de um período de 60 minutos será suficiente para evitar gargalos.
O que estou imaginando é mais ou menos assim.
Dentro do loop while principal, fazer uma chamada para um função que vai verificar o tempo decorrido desde o momento que foi iniciado. Deverá ler algum parâmetro que indicará o tempo ou contador para sair do ar. Se este número for inferior ao parâmetro x ou y, deverá disparar as rotinas de encerramento que vai providenciar várias limpezas.
A ideia é que acabe tudo antes que o novo cron entrar no ar. Lembrando que ele entra a cada 60 minutos.
Estou bem perdido pra falar a verdade em como devo fazer esta rotina regressiva.
Estou pensando em converter a data para segundos desde 1970 ( date "+%s" que devolve 1336748357) , onde imagino que seja meu start. Agora qual o valor futuro com 60 minutos a frente ?
Qual a melhor forma de fazer estes contadores ? O caminho seria este mesmo ?
Sugestões, todas bem-vindas ;)
Editado: 12:05
Algo similar ao tratado aqui: http://www.vivaolinux.com.br/topico/Shell-Script/Script-para-marcar-tempo
Editado: 12:12
A dica do @fdmarp deu uma luz, mas ainda não é o que preciso. Nem sempre será de 60 minutos. Estou dando este exemplo com 60 minutos.
#/bin/sh
# ROTINA DE VARIACAO DE SEGUNDOS ENTRE DUAS DATAS
# Codigo pertence a Comunidade
# VOL (Viva o Linux)
#-------------------------------------------------------
# Primeira versao: Davison Pasqualini
# 30/12/2009 fdmarp
#-------------------------------------------------------
data_inicial=`echo $1 | awk -F/ '{ print $2"/"$1"/"$3 }'`
data_final=`echo $3 | awk -F/ '{ print $2"/"$1"/"$3 }'`
hora_inicial=$2
hora_final=$4
data_seg1=`date +%s --date="$data_inicial $hora_inicial"`
data_seg2=`date +%s --date="$data_final $hora_final"`
resultado=`expr $data_seg2 - $data_seg1`
echo $resultado