Shell script funciona no comando mas não no crontab. [RESOLVIDO]

1. Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Bernardo Rhee
BernardoCR

(usa FreeBSD)

Enviado em 14/02/2011 - 04:13h

Olá pessoal,

Tenho uma dúvida que estou tentando solucionar a noite toda e não consigo.

Eu rodo o flashpolicyd na minha máquina FreeBSD, e ele anda travando de vez em quando (simplesmente para de aceitar conexões e somente volta quando eu killo e rodo novamente).

Criei um script que, em tese, deveria checar se o flashpolicyd recebe conexões e no caso de não receber, killa o processo e reinicia.

O nome do arquivo é check_flash.sh. Se eu der o comando ./check_flash.sh e ele não receber a resposta que ele quer ler, ele killa e rienicia o processo.

O problema é que no crontab ele nao funciona. Simplesmente não killa o processo. Podem me ajudar?

#!/bin/sh
SERVICE='version'

if /usr/local/bin/python -c 'print "<policy-file-request/>%c" % 0' | nc IP.4P.230.251 8001 | grep -v grep | grep -q $SERVICE
then
echo "$SERVICE está respondendo. Tudo está normal."
else
ps -aux | grep flashpolicyd.rb | grep -v grep | awk '{print$2}' | xargs kill
echo Erro no flashpolicyd. Killando e reativando o processo. | /usr/local/bin/mutt -s "Erro no Flashpolicyd ${ts}" email@email.com.br
sleep 5; echo Reativando o processo flashpolicyd...
/usr/local/etc/flashpolicyd-2.1/flashpolicyd.rb --xml /usr/local/etc/flashpolicyd-2.1/flashpolicy.xml --logfile /var/log/flashpolicy.log
fi

exit 0



  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 15/02/2011 - 02:24h

acabei de ver que da para pega o pid com o comando pidof

ex:
# pidof firefox-bin
2682

# pidof kwrite teste.sh
4371

ai da p jogar na variavel o resultado

ex:

# PID=`pidof firefox-bin`
# echo $PID
2682

nesse caso use assim

kill $PID

-------------------------

execute o comando "ps aux" e verifique o programa que queira matar

ai vc copia e joga na variavel, nesse caso irei usar o flashpolicyd.rb como exemplo

PID=`pidof flashpolicyd.rb`
kill $PID

algo +- assim

##########################################################3

#!/bin/sh
SERVICE='version'

if /usr/local/bin/python -c 'print "<policy-file-request/>%c" % 0' | nc IP.4P.230.251 8001 | grep -v grep | grep -q $SERVICE
then
echo "$SERVICE está respondendo. Tudo está normal."
else
PID=`pidof flashpolicyd.rb`
kill $PID
echo Erro no flashpolicyd. Killando e reativando o processo. | /usr/local/bin/mutt -s "Erro no Flashpolicyd ${ts}" email@email.com.br
sleep 5; echo Reativando o processo flashpolicyd...
/usr/local/etc/flashpolicyd-2.1/flashpolicyd.rb --xml /usr/local/etc/flashpolicyd-2.1/flashpolicy.xml --logfile /var/log/flashpolicy.log
fi

exit 0

######################################################

se quiser pode jogar em uma variavel o nome do programa no inicio do script

ex:
PROGRAMA="flashpolicyd.rb"
ou qualquer seja o nome
PROGRAMA="vi teste.sh"

ai no else vc coloca algo semelhante a isso

PID=`pidof $PROGRAMA`
kill $PID

assim fica mais facil, sempre que quiser mudar o programa, ai é só alterar o valor da variavel $PROGRAMA no inicio do arquivo
logico, depois da linha #!/bin/sh

3. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

José Mário
miura 787

(usa Ubuntu)

Enviado em 14/02/2011 - 14:56h

Tenho visto várias perguntas sobre o mesmo problema... scripts que rodam manualmente mas falham no crontab. Faça uma pesquisa no Vol sobre o crontab e veja se alguem conseguiu resolver...

Gostaria de saber também qual é a causa principal


4. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Daniel Vieceli
DanielVieceli755

(usa Debian)

Enviado em 14/02/2011 - 15:19h

Opa, posta como tá a configuração do Cron.

Valeu.


5. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Renato Augusto Andrade
CerberusBH

(usa Slackware)

Enviado em 14/02/2011 - 17:06h

Olá Bernardo!

Posta aqui, por favor, a configuração de seu Cron. Use o comando:

# crontab -l

IMPORTANTE: Vale sempre lembrar que o comando acima dá uma resposta diferente de:

$ crontab -l

Ou seja, cada usuário tem sua "crontab", certo? E no caso deste seu script, é importante configurar o Cron como root.

Abraços!


6. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Bernardo Rhee
BernardoCR

(usa FreeBSD)

Enviado em 14/02/2011 - 20:21h

O crontab está no usuário root.

Segue a linha do cron:

*/05 * * * * /home/check_flash.sh >/dev/null 2>&1

Obrigado galera,

Abraços.


7. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Bernardo Rhee
BernardoCR

(usa FreeBSD)

Enviado em 14/02/2011 - 20:31h

Se ajudar na resolução do problema, é o seguinte.

Tirei a parte que descarta a msg do crontab e recebi por e-mail a seguinte informação.

"version está respondendo. Tudo está normal."

Então quer dizer que no crontab, a primeira parte do comando funciona.

if /usr/local/bin/python -c 'print "<policy-file-request/>%c" % 0' | nc IP.4P.230.251 8001 | grep -v grep | grep -q $SERVICE
then
echo "$SERVICE está respondendo. Tudo está normal."

Imagino que o problema esteja nessa linha aqui:

ps -aux | grep flashpolicyd.rb | grep -v grep | awk '{print$2}' | xargs kill

O crontab não consegue killar o processo através dessa linha, não entendo o porque. Se eu der o comando normal, ele killa. Só pelo crontab que não.


8. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/02/2011 - 22:37h

ja viu as variaveis??

vc quer matar um processo pesquisando no "ps -aux"

da uma olhada nas variaveis Miscelânia

http://aurelio.net/shell/canivete.html

$$ Número PID do processo atual (do próprio script)
$! Número PID do último job em segundo plano
$_ Último argumento do último comando executado
$? Código de retorno do último comando executado

eu acho que se usar a variavel "$_" ou "$?" possa resolver

ai vc vai pegar o pid do processo, ai vc mata

nesse caso terá que pegar a variavel logo que executar o comando que vc quer matar, ai vc pega esse valor "pid" e salva em outra variavel "$PID" ai é só usar o comando kill p matar o processo =]

ja tive que fazer algo semelhante eheehhe


9. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Bernardo Rhee
BernardoCR

(usa FreeBSD)

Enviado em 15/02/2011 - 01:33h

Tentei com $_ ou $?.

O problema é que assim ele identifica como o processo anterior o PID do comando awk '{print$2}', e acaba killando a coisa errada.

Sobre setar a variável, queria uma ajuda. Sou bem novo em shell script.

Eu pensei em setar uma variável com o comando ps -aux | grep flashpolicyd.rb | grep -v grep | awk '{print$2}'

Depois de setada a variável, killar usando ela.

Como ficaria o código?

tentei colocar assim:

---------------

#!/bin/sh
SERVICE='version'

if /usr/local/bin/python -c 'print "<policy-file-request/>%c" % 0' | nc IP.4P.230.251 8001 | grep -v grep | grep -q $SERVICE
then
echo "$SERVICE está respondendo. Tudo está normal."
else
PID='ps -aux | grep flashpolicyd.rb | grep -v grep | awk '{print$2}''
kill $PID
echo Erro no flashpolicyd. Killando e reativando o processo. | /usr/local/bin/mutt -s "Erro no Flashpolicyd ${ts}" email@email.com.br
sleep 5; echo Reativando o processo flashpolicyd...
/usr/local/etc/flashpolicyd-2.1/flashpolicyd.rb --xml /usr/local/etc/flashpolicyd-2.1/flashpolicy.xml --logfile /var/log/flashpolicy.log
fi

exit 0

--------------

mas parece que não deu.

Valeu


10. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 15/02/2011 - 02:05h

executei o comando semelhante ao seu

ps aux | grep firefox-bin | grep -v grep | awk '{ print $2 }'

ai apareceu 2 pid, pelo visto não está sendo muito preciso, e tbm não precisa de - no aux

vou tentar criar um exemplo usando as variavei ai eu posto


11. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Bernardo Rhee
BernardoCR

(usa FreeBSD)

Enviado em 15/02/2011 - 02:32h

Eu mudei um pouco o método. No comando funcionou, mas no crontab não.

----------------------------

#!/bin/sh
SERVICE='version'

if /usr/local/bin/python -c 'print "<policy-file-request/>%c" % 0' | nc -w10 67.43.230.251 8001 | grep -v grep | grep -q $SERVICE
then
echo "$SERVICE está respondendo. Tudo está normal."
else
ps -aux | grep flashpolicyd.rb | grep -v grep | awk '{print$2}' > flash.pid
PID=`cat flash.pid | awk '{print $1}'`
sleep 2; kill -9 "$PID"
echo Erro no flashpolicyd. Killando e reativando o processo. | /usr/local/bin/mutt -s "Erro no Flashpolicyd ${ts}" email@email.com.br
sleep 3; echo Reativando o processo flashpolicyd...
/usr/local/etc/flashpolicyd-2.1/flashpolicyd.rb --xml /usr/local/etc/flashpolicyd-2.1/flashpolicy.xml --logfile /var/log/flashpolicy.log
fi

exit 0

-------------------

O problema é que ele me retorna erro no crontab com o motivo:

kill: illegal process id:


12. Re: Shell script funciona no comando mas não no crontab. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 15/02/2011 - 02:36h

tentou usar o pidof que eu disse acima??



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts