Antworten:
Erstellen Sie Ihre eigene Bash-Funktion und fügen Sie diese in Ihre ~/.bashrc
:
check_upstart_service(){
status $1 | grep -q "^$1 start" > /dev/null
return $?
}
Ich mag es wirklich nicht, die Ausgabe zu analysieren, aber ich sehe keinen anderen offensichtlichen Weg. In diesem Fall ist die Ausgabe von <service name> start
sehr zuverlässig, wie in der Upstart-Dokumentation angegeben .
Jetzt können Sie es so verwenden:
if check_upstart_service ssh; then echo "running"; else echo "stopped"; fi
Basierend auf String enthält 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
Mein erster Impuls war die Verwendung einer Variation des bereitgestellten Codes 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
das würde so etwas zurückgeben
Methode return sender =: 1.0 -> dest =: 1.94 reply_serial = 2 Variantenzeichenfolge "running"
und verwenden Sie die obige Lösung, um zu überprüfen, ob die zurückgegebene Zeichenfolge "running" enthält. Wenn der Job jedoch nicht ausgeführt wird, wird der dbus-Aufruf mit dem Status 1 beendet und stattdessen "Warten" zurückgegeben, wie ich es erwartet hatte.
status ${job}
würde niemals mit Status 1 beenden, außer in dem Fall, in dem es keinen solchen Job gibt.
Sie würden DBUS verwenden, um den Status dieses bestimmten Dienstes abzufragen.
$ 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
Beachten Sie, dass Sie beim Schreiben Ihres eigenen Upstart-Jobs stattdessen Upstart-Ereignisse oder Paketabhängigkeiten verwenden sollten.
Es scheint, dass der Befehl upstart status mit der Spezifikation des Init-Skripts aus dem Linux Standard Base-Projekt übereinstimmt. Dies bedeutet, dass Sie annehmen können, dass ein Exit-Code von 0 bedeutet, dass das Programm ausgeführt wird, ein Exit-Code von 1-3 bedeutet, dass es ausgeführt wird, und jeder andere anderer Exit-Code bedeutet einen undefinierten Status.
Siehe: 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
, um sicherzustellen, dass es still ist.