Problema com Script para verificar se processo está rodando [RESOLVIDO]

1. Problema com Script para verificar se processo está rodando [RESOLVIDO]

Franzvitor
fafiorim

(usa Debian)

Enviado em 05/03/2010 - 18:57h

Olá Amigos, estou com um problema em relação a um script para verificar se um processo está rodando e se não estiver starta-lo. Estou rodando o Honeyd com o plugin honeycomb, mas as vezes gera alguns "segmentation fault" e quero inicia-lo se o processo cair. Para isso vou usar o script logo a baixo e inserir no crotab para a cada 30 segundos executar o script que então verifica se o processo está rodando.

O problema é que quando o script passa $pgrep ${pname} logo abaixo mando um echo apenas para ver a saida e mostra 1 em execução e o processo inicia (apesar do if fazer comparação e só entra se for iqual 0). Porém quando o processo já está ativo e a saida do $pgrep ${pname} que na verdade é pgrep -f honeyd me manda o PID do processo, mas no echo que coloquei antes do if apenas para me mostrar o conteudo me retorna o PID e um 0, E com isso o processo inicia denovo.

A duvida é porque isso acontece, e se alguem conhecer algum jeito de verificar se um processo está rodando e se não estiver inicia-lo por favor me ajude. Segue o codigo abaixo. Desde já agradeço.


#!/bin/bash

startp="/usr/local/honeyd/bin/honeyd -d -i eth0 -f /usr/local/honeyd/test.conf -p /usr/local/honeyd/share/honeyd/nmap.prints -x /usr/local/honeyd/share/honeyd/xprobe2.conf -a /usr/local/honeyd/share/honeyd/nmap.assoc -l /var/log/honeyd/honeyd.log -i eth0 192.168.40.9"

#path to pgrep command (including the -f argument required)
pgrep="pgrep -f"

# Process name
pname="honeyd"

# Find a PID of pname
$pgrep ${pname}
echo $?

if [ $? -eq 0 ] # if not running
then
# start
$startp
date >> a
else
echo process ativo
fi



  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 05/03/2010 - 19:23h

Bem, pelo que vi você manda um echo $? e logo depois compara o valor de $? com zero. Após a execução do echo, o valor de $? irá agora representar o retorno do echo e não mais do pgrep.
Veja que o valor de $? após o echo será sempre verdadeiro porque nessas circunstâncias, o echo nunca retornará falso (1). Dessa maneira, o seu script sempre acaba entrando no if.

Retire o echo $? e tente executar o seu script, ou salve o valor de $? após a execução do pgrep e o compare no if.

OBS: Na linha do if, acho melhor você comparar o valor de $? com 1 e não com zero, pois se o pgrep não
encontrar o processo então ele irá retornar 1 e não 0.

Acho que é isso.
t+

3. Re: Problema com Script para verificar se processo está rodando [RESOLVIDO]

Franzvitor
fafiorim

(usa Debian)

Enviado em 05/03/2010 - 20:28h

Olá Daemonio, obrigado pela ajuda.

Não fiz o teste no servidor, mas fiz um retirando o "echo $?" e com ping e funcionou. Abaixo o codigo. E mais uma vez obrigado pela ajuda.

#!/bin/bash

pgrep="pgrep -f"
pname="ping"
$pgrep ${pname}

if [ $? -eq 1 ]
then
ping google.com
else
echo ativo
fi
exit






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts