Como determinar o status do job upstart no script bash?

10

Como você determina se um job upstart está sendo executado dentro de um script Bash? Ou seja, eu preciso de um valor "booleano" para fazer algo como:

#!/bin/bash
if [ determine_if_job_x_is_running ]; then
  echo "I see upstart job X is running, please stop it before ..."
fi
    
por laslowh 04.02.2013 / 19:44

5 respostas

9

Crie sua própria função Bash e coloque isso no seu ~/.bashrc :

check_upstart_service(){
    status $1 | grep -q "^$1 start" > /dev/null
    return $?
}

Eu realmente não gosto da maneira de analisar a saída, mas não vejo outra maneira óbvia. E, neste caso, a saída de <service name> start é muito confiável, conforme especificado na documentação do Upstart .

Agora você pode usá-lo assim:

if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
    
por gertvdijk 04.02.2013 / 20:24
1

Normalmente, você usa um arquivo PID, mas também pode usar o pgrep para verificar seus processos. Suponha que seu serviço seja chamado de jobX , isso funcionará:

if [ $(pgrep jobX) ]; then

Ou melhor ainda

if pgrep jobX > /dev/null 2>&1
    
por Rinzwind 04.02.2013 / 20:01
1

Baseado em Contém String no bash :

job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
  then
    # do whatever you need
  else
    # do whatever you need
fi

Meu primeiro impulso foi usar a variação do código ImaginaryRobots fornecido

job='your_job_name'
dbus-send --system --print-reply --dest=com.ubuntu.Upstart \
  /com/ubuntu/Upstart/jobs/${job}/_ \
  org.freedesktop.DBus.Properties.Get string:'' string:state

que retornaria algo como

% bl0ck_qu0te%

e use a solução acima para verificar se a string retornada contém "running". No entanto, caso esse trabalho não esteja executando, a chamada dbus sairá com o status 1, retornando "aguardando" como eu esperava.

status ${job} nunca sairia com o status 1, exceto no caso em que não há tal trabalho.

    
por Goran Miskovic 06.11.2014 / 17:25
0

Você usaria o DBUS para consultar o status desse serviço específico.

$ job=myjob
$ dbus-send --system --print-reply --dest=com.ubuntu.Upstart /com/ubuntu/Upstart/jobs/${job}/_ org.freedesktop.DBus.Properties.GetAll string:''

link

Observe que, se você estiver escrevendo seu próprio trabalho inicial, deverá usar eventos iniciais ou dependências de pacote.

    
por ImaginaryRobots 04.02.2013 / 20:01
0

Parece que o comando upstart status está em conformidade com a especificação do script init do projeto Linux Standard Base, significando que você pode assumir que um código de saída 0 significa que o programa está em execução, um código de saída de 1-3 significa que está em execução e qualquer outro código de saída significa um status indefinido.

Veja: link

    
por Scott Buchanan 12.03.2018 / 18:56

Tags