Maison >développement back-end >Golang >Comment définir dbus/systemd comme dépendance dans l'unité 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.
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
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
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 ?
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 :
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!