Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

1. Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 17/08/2012 - 09:28h

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. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 17/08/2012 - 10:37h

daniel.uramg escreveu:

# 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. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 17/08/2012 - 11:15h

renato_pacheco escreveu:
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.


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. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 17/08/2012 - 11:22h

daniel.uramg escreveu:

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


Coloque assim dentro do crontab:


PATH=/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. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 17/08/2012 - 12:17h

renato_pacheco escreveu:
Coloque assim dentro do crontab:


PATH=/sbin:/bin:/usr/sbin:/usr/bin:/etc:/etc/rc.d:/etc/rc.d/pkgs:/usr/local/sbin



como assim dentro do Crontab? no arquivo com as tarefas?

Eu adicionei no inicio do script:

PASTA=`dirname $0`; PASTA=`cd $PASTA; pwd`
PATH="$PATH:$PASTA"


vou esperar daqui a pouco o script rodar denovo pra ver se deu certo


6. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 17/08/2012 - 13:22h

sem sucesso..

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. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 17/08/2012 - 13:39h

Cara, como vc tá pegando esse PID?


8. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 17/08/2012 - 13:44h

renato_pacheco escreveu:

Cara, como vc tá pegando esse PID?

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. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 17/08/2012 - 13:54h

Não tem como vc postar o script completo? Nem sei q variável $PROG é essa.


10. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 17/08/2012 - 14:10h

renato_pacheco escreveu:

Não tem como vc postar o script completo? Nem sei q variável $PROG é essa.


cara ate tem, mas o script ta com 199 linhas!

esta variavel é pra pegar o nome do script, deveria ter postado logo as variaveis:

PROG=`basename $0`
SCRIPT=`echo $PROG | sed 's/\.sh$//'`
TMP_PID="/var/tmp/$SCRIPT.pid"
PASTA=`dirname $0`; PASTA=`cd $PASTA; pwd`
PATH="$PATH:$PASTA"

logger "$PASTA/$PROG executado"

# 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. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 17/08/2012 - 14:14h

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. Re: Script com verificação de duplicidade rodando no Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 17/08/2012 - 16:10h

renato_pacheco escreveu:

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



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts