Heim >Backend-Entwicklung >Golang >So legen Sie dbus/systemd als Abhängigkeit in der Systemd-Einheit fest
Der PHP-Editor Xiaoxin zeigt Ihnen, wie Sie DBus/Systemd als Abhängigkeit der Systemd-Einheit festlegen. DBus und Systemd sind zwei häufig verwendete Tools in Linux-Betriebssystemen. DBus wird für die Kommunikation zwischen Prozessen verwendet, während Systemd für die Systeminitialisierung und Prozessverwaltung verantwortlich ist. Durch die Kombination von DBus und Systemd kann eine effizientere Systemverwaltung und Ressourcenplanung erreicht werden. In diesem Artikel wird ausführlich erläutert, wie Sie DBus als Abhängigkeit in der Systemd-Einheit konfigurieren, damit Sie die Verwendung dieser beiden Tools besser verstehen und anwenden können.
Ich habe ein kleines Programm in go
geschrieben, das die go-systemd-Bibliothek verwendet, um über dbus mit systemd zu interagieren.
Das Programm selbst ist als Systemd-Einheit registriert und sollte beim Booten gestartet werden. Wenn das Programm ausgeführt wird, wird der Systemd-Einheitsstatus mehrerer Einheiten regelmäßig abgefragt.
Wenn ich jetzt das Programm manuell starte, ist alles in Ordnung. Wenn systemd jedoch nach einem Neustart startet, bleibt es „hängen“, was bedeutet, dass es den Status der systemd-Einheit nicht über dbus abfragen kann. Ich erhalte folgende Nachricht von der go-systemd
Bibliothek:
process org.freedesktop.systemd1 exited with status 1
Wenn ich jetzt das Programm neu starte, kann es sofort die Systemd-Einheiten ohne Fehler abfragen. Dies lässt mich vermuten, dass mein Programm fehlerhafte/falsch konfigurierte Abhängigkeiten und daher beim Start eine Race-Bedingung aufweist, die verhindert, dass das Programm über dbus mit systemd kommuniziert.
Jetzt habe ich das mit ein paar anderen Kombinationen zusammengestellt, aber es hilft nichts:
Requires=dbus.service After=dbus.service Wants=org.freedesktop.systemd1
Wie muss ich meine eigene Systemd-Einheit (des Go-Programms) konfigurieren, damit sie direkt nach dem Neustart mit Systemd über Dbus kommunizieren kann? Welche Abhängigkeiten muss ich konfigurieren?
Es hört sich so an, als würde Ihr Programm standardmäßig versuchen, eine Verbindung zum DBus-Sitzungsbus herzustellen, da Sie sagen, dass es einwandfrei funktioniert, wenn Sie es manuell ausführen. Wenn eine Anwendung von Systemd aus gestartet wird, wird sie standardmäßig als Root ausgeführt und verfügt über keinen Sitzungsbus, mit dem sie eine Verbindung herstellen kann, sodass sie fehlschlägt.
Wenn sich ein Benutzer an einem grafischen Terminal anmeldet, wird der Sitzungsbus normalerweise pro Anmeldung gestartet. Es wird standardmäßig nicht gestartet, wenn Sie sich über das Terminal anmelden.
Wenn dies der Fall ist, sehe ich derzeit zwei Möglichkeiten für Sie:
dbus-launch
einen neuen Bus zu erstellen, mit dem sich Ihre Anwendung verbinden kann. Das obige ist der detaillierte Inhalt vonSo legen Sie dbus/systemd als Abhängigkeit in der Systemd-Einheit fest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!