Maison > développement back-end > Golang > le corps du texte

Comment définir dbus/systemd comme dépendance dans l'unité systemd

PHPz
Libérer: 2024-02-12 09:10:21
avant
780 Les gens l'ont consulté

如何将 dbus/systemd 设置为 systemd 单元中的依赖项

L'éditeur php Xiaoxin vous présentera comment définir DBus/Systemd comme dépendance de l'unité Systemd. DBus et Systemd sont deux outils couramment utilisés dans les systèmes d'exploitation Linux. DBus est utilisé pour la communication inter-processus, tandis que Systemd est responsable de l'initialisation du système et de la gestion des processus. La combinaison de DBus et Systemd peut permettre une gestion du système et une planification des ressources plus efficaces. Cet article expliquera en détail comment configurer DBus en tant que dépendance dans l'unité Systemd pour vous aider à mieux comprendre et appliquer l'utilisation de ces deux outils.

Contenu de la question

J'ai un petit programme écrit en go qui utilise la bibliothèque go-systemd pour interagir avec systemd via dbus.

Le programme lui-même est enregistré en tant qu'unité systemd et doit être démarré au démarrage. Lorsque le programme est en cours d'exécution, l'état de l'unité systemd de plusieurs unités sera régulièrement interrogé.

Maintenant, lorsque je démarre le programme manuellement, tout va bien. Cependant, lorsque systemd démarre après un redémarrage, il se "bloque", ce qui signifie qu'il ne pourra pas interroger l'état de l'unité systemd via dbus. Je recevrai le message suivant de la go-systemd bibliothèque :

process org.freedesktop.systemd1 exited with status 1
Copier après la connexion

Maintenant, lorsque je redémarrerai le programme, il pourra immédiatement interroger les unités systemd sans erreur. Cela m'amène à supposer que mon programme a des dépendances défectueuses/mal configurées et donc une condition de concurrence critique au démarrage, empêchant le programme de communiquer avec systemd via dbus.

Maintenant, j'ai combiné cela avec quelques autres combinaisons, mais cela n'aide pas :

Requires=dbus.service
After=dbus.service
Wants=org.freedesktop.systemd1
Copier après la connexion

Comment dois-je configurer ma propre unité systemd (du programme go) pour qu'elle puisse communiquer avec systemd via dbus juste après le redémarrage ? Quelles dépendances dois-je configurer ?

Solution de contournement

Il semble que votre programme essaie de se connecter au bus DBus Session par défaut puisque vous dites qu'il fonctionne correctement lorsque vous l'exécutez manuellement. Lorsqu'une application est lancée à partir de Systemd, elle s'exécutera en tant que root par défaut et n'aura pas de bus de session auquel se connecter, elle échouera donc.

Lorsqu'un utilisateur se connecte sur un terminal graphique, le bus de session est généralement démarré connexion par connexion. Il ne démarrera pas par défaut lors de la connexion depuis le terminal.

Si tel est le cas, je vois actuellement que vous avez deux options :

  1. Utilisez le bus système au lieu du bus de session.
  2. Créez votre propre bus connecté, différent du bus de session et du bus système. Le moyen le plus simple est d'utiliser dbus-launch pour créer un nouveau bus auquel votre application peut se connecter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!