Respostas:
Crie sua própria função Bash e coloque-a em ~/.bashrc
:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Realmente não gosto da maneira de analisar a saída, mas não vejo outra maneira óbvia. E, nesse 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
Baseado em String contém 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 que ImaginaryRobots forneceu
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
método return remetente =: 1.0 -> dest =: 1.94 reply_serial = cadeia de caracteres 2 variante "running"
e use a solução acima para verificar se a string retornada contém "running". No entanto, caso esse trabalho não esteja em execução, a chamada do dbus sairá com o status 1, retornando "em espera", como eu esperava.
status ${job}
nunca sairia com o status 1, exceto no caso em que não houver esse trabalho.
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:''
http://upstart.ubuntu.com/cookbook/#get-status-of-job-via-d-bus
Observe que, se você estiver escrevendo seu próprio trabalho de inicialização, use eventos de inicialização ou dependências de pacotes.
Parece que o comando upstart status está em conformidade com a especificação do script init do projeto Linux Standard Base, o que significa que você pode assumir um código de saída 0 significa que o programa está em execução, um código de saída 1-3 significa que está em execução e qualquer outro código de saída significa um status indefinido.
Veja: http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null
apenas para garantir que esteja silencioso.