Respuestas:
Crea tu propia función Bash y pon esto en tu ~/.bashrc:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Realmente no me gusta la forma de analizar la salida, pero no veo otra forma obvia. Y en este caso, la salida de <service name> startes muy confiable como se especifica en la documentación de Upstart .
Ahora puedes usarlo así:
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
Basado en String contiene en bash :
job='your_job_name'
job_status=$(status ${job})
if [[ ${job_status} == *running* ]]
then
# do whatever you need
else
# do whatever you need
fi
Mi primer impulso fue usar la variación de código que se proporcionaba ImaginaryRobots
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 devolvería algo como
método return sender =: 1.0 -> dest =: 1.94 reply_serial = 2 cadena de variantes "en ejecución"
y use la solución anterior para verificar si la cadena devuelta contiene "en ejecución". Sin embargo, en caso de que el trabajo no se esté ejecutando, la llamada dbus saldrá con el estado 1 en su lugar, devolverá "esperando" como esperaba.
status ${job} nunca saldría con el estado 1, excepto en el caso de que no haya tal trabajo.
Usaría DBUS para consultar el estado de ese servicio en particular.
$ 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
Tenga en cuenta que si está escribiendo su propio trabajo de inicio, debe usar eventos de inicio o dependencias de paquetes.
Parece que el comando de estado upstart se ajusta a la especificación del script de inicio del proyecto Linux Standard Base, lo que significa que puede asumir que un código de salida de 0 significa que el programa se está ejecutando, un código de salida de 1-3 significa que se está ejecutando y cualquier otro código de salida significa un estado indefinido.
Ver: 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/nullsolo para asegurarse de que sea silencioso.