2017-07-06 1 views
2

Ich möchte über alle Statusänderungen von Serviceeinheiten informiert werden. Ich weiß, dass es die DBUS-API gibt, die mir Signale für UnitNew und UnitRemoved gibt, aber die Semantik ist mir immer noch unklar. Auch die Signale liefern nicht die Informationen, die ich brauche.Wie registriere ich mich für Systemd Service Lifecycle Events?

Ich benutze gehen und versuchte die go-systemd lib von Coreos. Sie bieten eine Möglichkeit zum "Abonnieren", aber tatsächlich werden alle im System verfügbaren Geräteinformationen abgefragt. Ich möchte das nicht alle paar Millisekunden tun, nur um mich über Zustandsänderungen zu informieren.

Ich habe auch versucht, die Standard org.freedesktop.DBus.Properties, aber ich kann nicht das funktioniert.

Bitte helfen Wenn Sie können, habe ich keine Ideen mehr.

Antwort

0

The systemd APIs die Informationen über den Start oder Stopp von Serviceeinheiten enthalten sind:

  • Die systemd Zeitschrift. Sie können es anhören, indem Sie journalctl ausführen oder es über das Netzwerk an Ihr Programm weiterleiten oder nach Änderungen an den Dateien auf der Festplatte suchen. Beispiel: Führen Sie journalctl --follow -o json-pretty _PID=1 aus (Sie können verschiedene Filter wie UNIT=gdm.service hinzufügen, um nur die für einen Dienst zu erhalten) und dann stdout entsprechend der systemd journal json output format analysieren, um die Journalnachrichten von Systemd zu erhalten. Verwenden Sie die MESSAGE_ID, um das Ereignis zu erfassen und nach unbekannten Nachrichten zu suchen, um zu wissen, wann eine vorhandene Nachricht durch eine neue Nachricht ersetzt wurde. Während dies möglicherweise robust genug funktioniert, sind Protokollnachrichten in erster Linie nicht als API gedacht. Daher würde ich empfehlen, die folgenden Optionen zu verwenden.

  • Linux cgroup notifications wie sie generiert werden, wenn systemd uses cgroups einen Dienst zu starten.

  • systemd units über ihre Abhängigkeiten (wie Wants=)

Verwandte Themen