Die folgende Sequenz gibt mir den Rückgabewert des ersten Befehls, nicht des zweiten, wie ich erwartet hätte (unabhängig davon, ob ich den ersten Befehl in einer Subshell ausführe):
sudo systemctl start x; sudo systemctl is-active --quiet x; echo $?;
(sudo systemctl start x); sudo systemctl is-active --quiet x; echo $?;
Der Dienst x
ist defekt und konnte nicht gestartet werden - er läuft also nicht. Der folgende Befehl, der eigenständig ausgeführt wird, gibt mir einen korrekten Rückgabewert, 3
wie er sein sollte:
sudo systemctl is-active --quiet x; echo $?;
Warum erhalte ich 0
beim Ausführen den Rückgabewert des ersten Befehls ( ) command; command; echo $?
anstelle des Rückgabewerts ( 3
) des zweiten mit echo $?
?
Ich bin dran GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
. Ich weiß, dass es funktioniert, wenn ich es in zwei Zeilen aufteile:
sudo systemctl start x;
sudo systemctl is-active --quiet x; echo $?;
Aber ich muss es als Einzeiler haben, da ich es in die PHP- shell_exec()
Funktion stecke . Das zweimalige Ausführen shell_exec()
hat das gleiche Ergebnis wie das Einfügen der Befehle in eine Zeile.
sd_notify
Socket verwenden, um den Starterfolg selbst zu melden, sogar mehr. Das heißt, es ist durchaus möglich sicherzustellen, dass systemd weiß, wann ein Dienst tatsächlich erfolgreich initialisiert wurde. Es braucht nur etwas zusätzlichen Code.