Como você determina se um trabalho inicial está sendo executado dentro de um script Bash? Ou seja, 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
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null
apenas para garantir que esteja silencioso.Normalmente você usa um arquivo PID, mas também pode usar o pgrep para verificar seus processos. Suponha que seu serviço seja chamado
jobX
assim:Ou melhor ainda
fonte
Baseado em String contém no bash :
Meu primeiro impulso foi usar a variação do código que ImaginaryRobots forneceu
que retornaria algo como
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.fonte
Você usaria o DBUS para consultar o status desse serviço específico.
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.
fonte
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
fonte