daniel.uramg
(usa Outra)
Enviado em 13/05/2013 - 16:20h
Olá pessoal
eu tenho um script que executa a cada hora e faz várias requisições em hosts via wget, porém este script não pode executar uma instância se já tiver outra em rodando, então criei uma função pra ele verificar se tem outro processo já rodando:
# Garante a execucao de apenas uma instancia do script
TMP_PID="/var/tmp/$SCRIPT.pid"
if [ -s "$TMP_PID" ]; then
PID=`cat $TMP_PID`
if [ "`ps | grep -E "(^$PID)|( ^$PID)" | grep script.sh | grep -v grep`" ]; then
FUNC_DEBUG "Script encerrado pois outra instancia em execução PID=$PID ("`ps | grep $PID`")"
logger "$PASTA/$PROG abortado pois Outra instancia em execução PID=$PID"
exit 3
fi
fi
echo $$ > $TMP_PID
Blz aparentemente funciona, no início achei que estava bem eficiente, só que de uns dias pra cá vim observar nos logs que as vezes o script fica muitas horas sem executar pois tem um processo travado, as vezes fica dias sem executar até eu ver e matar todos processos..
e agora percebi um bug pior ainda: dei `ps` e tinha um monte de instância do script em execução, daí mandei executar ele manualmente e mesmo assim ele executou (o processo daquele PID já tinha parado, mas tinham outros em execução)
então queria criar tipo um timer no script, por exemplo se ele demorar mais que 1 minuto no "wget" ele encerra e passa pro próximo, ou algo assim.
o script é bem grande por isso fica complicado de eu colar ele todo aqui, e ia acabar é confundindo mais ainda. O que ele faz basicamente é ler vários códigos de um BD e requisitar uma URL para este código via wget, salvar o resultado e passar pro próximo código até que se acabem.
alguém tem uma ideia??
Grato.