Como tentar iniciar um serviço apenas se ele não estiver sendo executado? (Linux)

3

Eu sei que preciso contar quantas instâncias estão sendo executadas:

ps x | grep apache2 | wc -l 

resultado, se estiver em execução: 2 , ou então: 1

Eu também sei que existe um comando chamado test que eu poderia usar para realizar a verificação, mas não sei como usar test com wc

    
por Jader Dias 16.04.2010 / 15:26

3 respostas

5

Os scripts de inicialização na maioria das distribuições Linux lidam com isso, salvando o ID do Processo do serviço (daemon) quando eles são iniciados.

Esses PIDs são normalmente armazenados em /var/run/ . Por exemplo, em meu sistema, o Apache2 armazena seu ID de processo original ou pai (útil para processos pré-bifurcados) em /var/run/apache2.pid . Assim, você pode enviar sinais como SIGHUP ou SIGSTOP para o processo para sinalizar um recarregamento de configuração ou para parar o serviço (daemon).

Uma nota para ajudar na busca do processo de estilo ps ax é usar um pequeno truque para escapar do padrão de expressão regular do grep usado para correspondência, de forma que ele não corresponda a si próprio. Por exemplo. ps ax | grep [a]pache2 | wc -l

man test fornece os fundamentos do comando test . Para tarefas simples no shell script, é melhor evitar depender de qual shell você está usando. Normalmente, para script básico , é recomendável escrever scripts direcionados ao Shell Borne ( /bin/sh ), já que esse tende a ser o mais denominador comum mais baixo popular.

#!/bin/sh

RC= 'ps ax | grep [a]pache2 | wc -l'

if [ $RC -gt 0 ]; then
  kill -SIGSTOP 'cat /var/run/apache2.pid'
fi
    
por 16.04.2010 / 16:20
1

Se você estiver trabalhando com o bash, poderá fazê-lo com verificações :

#/bin/bash
num="1"
if [ $num -eq "1" ]; then
        echo "got 1"
fi

if [ $num -eq "2" ]; then
        echo "got 2"
fi
    
por 16.04.2010 / 15:38
1
if (( $(ps x | grep [a]pache2 | wc -l) > 0 ))
then
    do_something
else
    do_something_else
fi

ou

case $(ps x | grep [a]pache2 | wc -l) in
    0)
        do_zero_thing
        ;;
    1)
        do_one_thing
        ;;
    *)
        do_default_thing
        ;;
esac

Os colchetes usados dessa forma no comando grep suprimem o próprio grep de ser incluído em sua própria saída. Isso fará com que o processo conte 0 se o apache não estiver sendo executado.

    
por 16.04.2010 / 16:15

Tags