Bash: verifica se o processo parou

1

Estou trabalhando no script para iniciar / interromper um conjunto de serviços. Para parar, ele precisa encerrar muitos processos que demoram e podem ser interrompidos.

O script precisa verificar se o processo realmente foi encerrado e enviar um email se isso não ocorrer após um determinado período.

Isso é o que eu tenho:

pkill -f "stuff"

for i in {1..30}; do
    VERIFICATIONS=$i
    if verification_command then
        echo "It's gone"
        break
    fi
    sleep 2
done

if [ $VERIFICATIONS -ge 30 ]; then
   echo "failed to terminate"
   # send mail
fi

Existe uma maneira melhor de fazer isso?

    
por pfac 30.10.2013 / 15:23

2 respostas

0

Encontrei o que acredito ser a melhor abordagem, com base em comentário de napcae : use uma função.

assert_service_stopped () {
    for i in {1..30}; do
        if verification_command then
            echo "It's gone"
            return 0
        fi
        sleep 2
    done
    echo "It hangs dude!"
    return 1
}        

pkill -f "stuff"

if ! assert_service_stopped; then
    echo "failed to terminate"
    # send mail
fi

Isto tem a vantagem de permitir muitas afirmações facilmente, e quando não é necessária nenhuma ação (como enviar o email) as asserções podem ser executadas por último e o status de saída do script refletirá o resultado das asserções.

    
por 31.10.2013 / 16:17
0

Não sei qual parte você deseja melhorar. Quanto ao kill, muitos processos armazenam seu próprio pid (= id do processo) no diretório / var / run, em um arquivo de extensão .pid que contém apenas o seu pid, nada mais.

Este pid é usado pelos programas para se matar (cometer suicídio?). Se o programa for reiniciado (uma causa frequente de incapacidade de matar um programa), o novo pid será diferente do antigo. Tudo isso se aplica especificamente aos serviços, ou seja, o programa que você pode parar com

 sudo service sshd stop

(no Debian e derivados). Talvez você possa considerar a implementação de um mecanismo semelhante.

    
por 30.10.2013 / 15:38

Tags