table of contents
SYSTEMD-NOTIFY(1) | systemd-notify | SYSTEMD-NOTIFY(1) |
BEZEICHNUNG¶
systemd-notify - Den Diensteverwalter über den Abschluss des Startens und andere Statusänderungen des Daemons benachrichtigen
ÜBERSICHT¶
systemd-notify [OPTIONEN…] [VARIABLE=WERT…]
systemd-notify --exec [OPTIONEN…] [VARIABLE=WERT…] ; [BEFEHLSZEILE…]
BESCHREIBUNG¶
systemd-notify kann von Dienste-Skripten zur Benachrichtigung des aufrufenden Diensteverwalters über Statusänderungen aufgerufen werden. Es kann zum Senden beliebiger Informationen, kodiert in einer umgebungsblockartigen Zeichenkettenliste, verwandt werden. Am wichtigsten ist der Einsatz zur Benachrichtigung über den Abschluss des Starts.
Dies ist hauptsächlich eine Hülle um sd_notify() und stellt diese Funktionalität Shell-Skripten zur Verfügung. Für Details siehe sd_notify(3).
Dieser Befehl kann eine Liste von Umgebungsvariablen transportieren, die als Teil der Statusaktualisierung gesandt werden sollen.
Beachten Sie, dass Systemd den Empfang von Statusaktualisierungen aus diesem Befehl verweigern wird, falls nicht NotifyAccess= geeignet für die Dienste-Unit, aus der dieser Befehl aufgerufen wird, gesetzt ist. Siehe systemd.service(5) für Details.
Beachten Sie, dass sd_notify()-Benachrichtigungen nur Units korrekt zugeordnet werden können, falls entweder der sendende Prozess noch zu dem Zeitpunkt vorhanden ist, zu dem der Diensteverwalter die Nachricht verarbeitet oder falls der sendende Prozess explizit vom Diensteverwalter laufzeitverfolgt ist. Letzteres ist der Fall, falls der Diensteverwalter den Prozess ursprünglich mit »fork« erzeugte, d.h. bei allen Prozessen, die auf NotifyAccess=main oder NotifyAccess=exec passen. Umgekehrt, falls ein Hilfsprozess einer Unit eine sd_notify()-Nachricht sendet und sich sofort beendet, könnte der Diensteverwalter nicht in der Lage sein, die Nachricht korrekt der Unit zuzuordnen und wird sie daher ignorieren, selbst falls NotifyAccess=all für sie gesetzt ist. Um dieses zu beheben, wird systemd-notify warten, bis alle Benachrichtigungsmeldungen durch den Diensteverwalter verarbeitet wurden. Wenn --no-block verwandt wird, wird diese Synchronisationen zum Empfang von Benachrichtigungen deaktiviert und daher kann der weiter oben erwähnte Ressourcenwettlauf stattfinden, falls der aufrufende Prozess nicht der Diensteverwalter ist oder von diesem erzeugt wurde.
systemd-notify wird zuerst versuchen, sd_notify() aufzurufen und dabei vorzugeben, die PID des übergeordneten Prozesses von systemd-notify (d.h. des aufrufenden Prozesses) zu besitzen. Dies gelingt nur, wenn der Aufruf mit ausreichenden Privilegien erfolgt. Beim Fehlschlag wird er dann auf den Aufruf unter seiner eigenen PID zurückfallen. Dieses Verhalten ist nützlich, damit der Shell-Prozess — und nicht der systemd-notify-Prozess — im Falle des Aufrufs des Werkzeugs aus einem Shell-Skript als Sender der Nachricht erscheint, was wiederum hilfreich ist, falls der Shell-Prozess aufgrund der Einschränkungen von NotifyAccess=all im Hauptprozess eines Dienstes erscheint. Verwenden Sie den Schalter --pid=, um dieses Verhalten anzupassen.
OPTIONEN¶
Die folgenden Optionen werden verstanden:
--ready
--reloading
Hinzugefügt in Version 253.
--stopping
Hinzugefügt in Version 253.
--pid=
Falls dieser Schalter im Aufruf von systemd-notify aus einem Prozess, der der neue Hauptprozess des Dienstes werden soll – und der nicht der vom Diensteverwalter mit Fork erzeugte Prozess ist (oder der aktuelle Hauptprozess) – verwandt wird, dann ist es wesentlich, NotifyAccess=all in der Dienste-Unit-Datei zu setzen oder andernfalls wird die Benachrichtigung aus Sicherheitsgründen ignoriert. Siehe systemd.service(5) für Details.
--uid=BENUTZER
Hinzugefügt in Version 237.
--status=
--booted
--no-block
Hinzugefügt in Version 246.
--exec
Beachten Sie, dass viele Shells »;« als ihr eigenes Trennzeichen für Befehlszeilen interpretieren, daher muss das Semikolon normalerweise als »\;« maskiert werden, wenn systemd-notify von der Shell aufgerufen wird.
Hinzugefügt in Version 254.
--fd=
Um diese Funktionalität von einer bash(1)-Shell zu verwenden, nutzen Sie einen Ausdruck der folgenden Art:
systemd-notify --fd=4 --fd=5 4</eine/Datei 5</eine/andere/Datei
Hinzugefügt in Version 254.
--fdname=
Hinzugefügt in Version 254.
-h, --help
--version
EXIT-STATUS¶
Bei Erfolg wird 0 zurückgegeben, anderenfalls ein Fehlercode ungleich Null.
BEISPIEL¶
Example 1. Startbenachrichtigungen und Statusaktualisierungen
Ein einfacher Shell-Daemon, der Startbenachrichtigungen versendet, nachdem er einen Kommunikationskanal eingerichtet hat. Während der Laufzeit sendet er weitere Statusaktualisierungen an das Init-System:
#!/bin/sh mkfifo /tmp/waldo systemd-notify --ready --status="Warte auf Daten…" while : ; do
read -r a < /tmp/waldo
systemd-notify --status="Verarbeite $a"
# Mache etwas mit $a …
systemd-notify --status="Warten auf Daten…" done
SIEHE AUCH¶
systemd(1), systemctl(1), systemd.unit(5), systemd.service(5), sd_notify(3), sd_booted(3)
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.
systemd 255 |