Olá pessoal,
tenho um script que é executado a cada hora que faz uma série de requisições em alguns servidores, eu adicionei uma função pra verificar se já não existe o processo anterior rodando, quando executo ele no prompt funciona corretamente, mas quando ele é executado pelo Cron sempre é finalizado pois ele "acha" que tem outro processo rodando.
# Garante a execucao de apenas uma instancia do script
if [ -s "$TMP_PID" ]; then
PID=`cat $TMP_PID`
if [ ! -z "`ps | grep $PID`" ]; then
echo "$PROG: Outra instancia em execução PID=$PID em `date`" >&2
logger "$PASTA/$PROG abortado pois outra instancia em execução PID=$PID"
exit 3
fi
fi
echo $$ > $TMP_PID
Ontem a noite fiz algumas alterações e testes e parece que tinha resolvido, hoje de manhã foi ver os Logs e ele estava dando que tem outra instância em execução, fui ver o arquivo do PID e estava com data de ontem as 22h +- onde terminei os testes e achei que tinha resolvido
antes o [ ! -z "`ps | grep $PID`" ] era apenas [ "`ps | grep $PID`" ] que assim nunca rodava pelo cron resultando no mesmo erro, mas pelo prompt funcionava perfeito, depois que adicionei ontem o "! -z" e testei várias vezes no Cron funcionou bem, depois já parou denovo!
grato
[2] Enviado em 17/08/2012 - 10:37h Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]
# Garante a execucao de apenas uma instancia do script
if [ -s "$TMP_PID" ]; then
PID=`cat $TMP_PID`
if [ ! -z "`ps | grep $PID`" ]; then
echo "$PROG: Outra instancia em execução PID=$PID em `date`" >&2
logger "$PASTA/$PROG abortado pois outra instancia em execução PID=$PID"
exit 3
fi
fi
echo $$ > $TMP_PID
grato
Duas coisas:
- Vc definiu a variável PATH no seu cron? Às vezes ele pode não estar reconhecendo alguns comandos (echo, logger etc.);
- Toda saída deve ser redirecionada para um arquivo ou para o nada (/dev/null), senão o cron não executa.
[3] Enviado em 17/08/2012 - 11:15h Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]
- Vc definiu a variável PATH no seu cron? Às vezes ele pode não estar reconhecendo alguns comandos (echo, logger etc.);
- Toda saída deve ser redirecionada para um arquivo ou para o nada (/dev/null), senão o cron não executa.
Renato não defini a PATH no Cron não, na verdade não entendi, como defino ela no Cron?
Eu adicionei no inicio do ecript "echo $PATH" e executei ele no prompt me retornou /sbin:/bin:/usr/sbin:/usr/bin:/etc:/etc/rc.d:/etc/rc.d/pkgs:/usr/local/sbin
vc diz que as saídas devem ser redirecionadas para /dev/null por exemplo no if [ ! -z "`ps | grep $PID`" ]; then ficando if [ ! -z "`ps | grep $PID >/dev/null`" ]; then ??
pois é nesta verificação que ta falhando
[4] Enviado em 17/08/2012 - 11:22h Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]
Renato não defini a PATH no Cron não, na verdade não entendi, como defino ela no Cron?
Eu adicionei no inicio do ecript "echo $PATH" e executei ele no prompt me retornou /sbin:/bin:/usr/sbin:/usr/bin:/etc:/etc/rc.d:/etc/rc.d/pkgs:/usr/local/sbin
vc diz que as saídas devem ser redirecionadas para /dev/null por exemplo no if [ ! -z "`ps | grep $PID`" ]; then ficando if [ ! -z "`ps | grep $PID >/dev/null`" ]; then ??
pois é nesta verificação que ta falhando
Sim. Todas os comandos q possuem uma saída d texto vc deve redirecioná-las. Se for interessante, redirecione para um arquivo, caso contrário, redirecione para o nada.
[5] Enviado em 17/08/2012 - 12:17h Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]
Aug 17 13:10:01 router user.notice root: /partition/trackerSQL/script.sh executado
Aug 17 13:10:01 router user.notice root: /partition/trackerSQL/script.sh abortado pois Outra instancia em execução PID=7670
e o arquivo do PID está com horário de 12:18, não estava rodando este processo e mesmo assim ele tá parando
[7] Enviado em 17/08/2012 - 13:39h Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]
SCRIPT=`echo $PROG | sed 's/\.sh$//'` #o nome do script
TMP_PID=/var/tmp/$SCRIPT.pid #o arquivo PID
echo $$ > $TMP_PID #coloca o PID no
PID=`cat $TMP_PID` #Le o arquivo PID
[9] Enviado em 17/08/2012 - 13:54h Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]
# Garante a execucao de apenas uma instancia do script
if [ -s "$TMP_PID" ]; then
PID=`cat $TMP_PID`
if [ ! -z "`ps | grep $PID`" ]; then
echo "$PROG: outra instancia em execução PID=$PID em `date`" >&2
logger "$PASTA/$PROG abortado pois Outra instancia em execução PID=$PID"
exit 3
fi
fi
echo $$ > $TMP_PID
[11] Enviado em 17/08/2012 - 14:14h Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]
Bote a tarefa pra rodar no cron meia-hora depois da primeira execução e veja se dá o msm problema. Quando tiver chegando no horário, olhe com o ps se realmente o script ainda está rodando e se o PID mostrado bate com o mostrado na msg da execução.
[12] Enviado em 17/08/2012 - 16:10h Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]
Bote a tarefa pra rodar no cron meia-hora depois da primeira execução e veja se dá o msm problema. Quando tiver chegando no horário, olhe com o ps se realmente o script ainda está rodando e se o PID mostrado bate com o mostrado na msg da execução.
não deu certo, deu o mesmo problema falando que outra instancia estava em execução e eu fiquei verificando os processos e não tinha outra instância em execução