php エディタ Xiaoxin は、DBus/Systemd を Systemd ユニットの依存関係として設定する方法を紹介します。 DBus と Systemd は、Linux オペレーティング システムで一般的に使用される 2 つのツールです。DBus はプロセス間通信に使用され、Systemd はシステムの初期化とプロセス管理を担当します。 DBus と Systemd を組み合わせると、より効率的なシステム管理とリソース スケジューリングを実現できます。この記事では、これら 2 つのツールの使用法をよりよく理解して適用できるように、Systemd ユニットの依存関係として DBus を構成する方法を詳しく説明します。
私は、go-systemd ライブラリを使用して dbus を介して systemd と対話する、go
で書かれた小さなプログラムを持っています。
プログラム自体は systemd ユニットとして登録されており、起動時に開始される必要があります。プログラムの実行中、複数のユニットの systemd ユニットのステータスが定期的に照会されます。
プログラムを手動で起動すると、すべて問題ありません。ただし、再起動後に systemd が起動すると、systemd が「ハング」します。つまり、dbus 経由で systemd ユニットのステータスを照会できなくなります。 go-systemd
ライブラリから次のメッセージを受け取ります:
これで、プログラムを再起動すると、エラーなしですぐに systemd ユニットをクエリできるようになります。これにより、プログラムに欠陥のある依存関係または誤った依存関係があり、そのため起動時に競合状態が発生し、プログラムが dbus 経由で systemd と通信できなくなっているのではないかと考えられます。
これを他のいくつかの組み合わせと組み合わせてみましたが、役に立ちませんでした:
リーリー再起動直後に dbus 経由で systemd と通信できるように、(go プログラムの) 独自の systemd ユニットを設定するにはどうすればよいですか?どのような依存関係を設定する必要がありますか?
プログラムを手動で実行すると正常に動作するとのことなので、プログラムはデフォルトで DBus セッション バスに接続しようとしているようです。アプリケーションが Systemd から起動されると、デフォルトで root として実行され、接続するセッション バスがないため、失敗します。
ユーザーがグラフィカル端末にログインすると、通常、ログインごとにセッション バスが開始されます。端末からログインした場合、デフォルトでは起動しません。
この場合、現時点では 2 つの選択肢があると考えられます:
dbus-launch
を使用して、アプリケーションが接続できる新しいバスを作成することです。 以上がsystemd ユニットで dbus/systemd を依存関係として設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。