Wie stellen Sie fest, ob ein Startjob in einem Bash-Skript ausgeführt wird? Das heißt, ich brauche einen "booleschen" Wert, um etwas zu tun wie:
#!/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
, um sicherzustellen, dass es still ist.Normalerweise verwenden Sie eine PID-Datei, aber Sie können auch pgrep verwenden, um Ihre Prozesse zu überprüfen. Angenommen, Ihr Dienst heißt,
jobX
dies funktioniert:Oder noch besser
quelle
Basierend auf String enthält in bash :
Mein erster Impuls war die Verwendung einer Variation des bereitgestellten Codes ImaginaryRobots
das würde so etwas zurückgeben
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.quelle
Sie würden DBUS verwenden, um den Status dieses bestimmten Dienstes abzufragen.
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.
quelle
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
quelle