Risposte:
Crea la tua funzione Bash e inseriscila nel tuo ~/.bashrc
:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Non mi piace molto il modo di analizzare l'output, ma non vedo un altro modo ovvio. E in questo caso l'output di <service name> start
è molto affidabile come specificato nella documentazione di Upstart .
Ora puoi usarlo in questo modo:
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
Basato su String contiene in bash :
job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
then
# do whatever you need
else
# do whatever you need
fi
Il mio primo impulso è stato quello di utilizzare la variazione del codice ImaginaryRobots fornito
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
che restituirebbe qualcosa del genere
metodo return mittente =: 1.0 -> dest =: 1.94 reply_serial = 2 stringa variante "in esecuzione"
e utilizzare la soluzione sopra per verificare se la stringa restituita contiene "in esecuzione". Tuttavia, nel caso in cui il lavoro non sia in esecuzione, la chiamata dbus uscirà con lo stato 1 invece di restituire "attesa" come mi aspettavo.
status ${job}
non uscirebbe mai con lo stato 1 se non nel caso in cui tale lavoro non sia presente.
Si utilizzerà DBUS per interrogare lo stato di quel particolare servizio.
$ 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
Nota che se stai scrivendo il tuo lavoro upstart, dovresti invece usare eventi upstart o dipendenze di pacchetti.
Sembra che il comando upstart status sia conforme alle specifiche dello script init dal progetto Linux Standard Base, il che significa che puoi assumere un codice di uscita 0 significa che il programma è in esecuzione, un codice di uscita 1-3 significa che è in esecuzione e qualsiasi altro codice di uscita indica uno stato indefinito.
Vedi: 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
solo per assicurarti che sia silenzioso.