2017-07-06 6 views
2

Je veux être informé de tous les changements d'état des unités de service. Je sais qu'il y a l'API DBUS qui me donne des signaux pour UnitNew et UnitRemoved, mais la sémantique n'est toujours pas claire pour moi. De plus, les signaux ne fournissent pas les informations dont j'ai besoin.Comment s'inscrire aux événements du cycle de vie du service systemd?

J'utilise go et j'ai essayé le go-systemd lib de coreos. Ils fournissent un moyen de "s'abonner" mais en fait, il interroge toutes les informations de l'unité disponibles dans le système. Je ne veux pas le faire toutes les quelques millisecondes, juste pour être informé des changements d'état.

J'ai également essayé le org.freedesktop.DBus.Properties par défaut mais je ne peux pas obtenir ce travail.

S'il vous plaît aider Si vous le pouvez, je suis à court d'idées.

Répondre

0

Le systemd APIs qui contiennent des informations sur le début ou l'arrêt des unités de service sont:

  • Le journal systemd. Vous pouvez l'écouter en exécutant journalctl ou en le transférant via le réseau à votre programme ou en surveillant les modifications apportées aux fichiers sur le disque. Par exemple: exécutez journalctl --follow -o json-pretty _PID=1 (vous pouvez ajouter divers filtres comme UNIT=gdm.service pour obtenir uniquement ceux pour un service), puis analyser stdout selon le systemd journal json output format pour obtenir les messages de journal de systemd. Utilisez le MESSAGE_ID pour faire correspondre ce que l'événement signifie et surveillez les messages inconnus pour savoir quand un message existant a été remplacé par un nouveau message. Bien que cela puisse fonctionner suffisamment, les messages de journalisation ne sont pas principalement conçus comme une API. En tant que tel, je recommande d'utiliser les options ci-dessous.

  • Linux cgroup notifications comme ils sont générés lorsque systemd uses cgroups pour démarrer un service.

  • systemd units via leurs dépendances (comme Wants=)