ホームページ  >  記事  >  バックエンド開発  >  systemd ユニットで dbus/systemd を依存関係として設定する方法

systemd ユニットで dbus/systemd を依存関係として設定する方法

PHPz
PHPz転載
2024-02-12 09:10:21780ブラウズ

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

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 つの選択肢があると考えられます:

  1. セッション バスの代わりにシステム バスを使用します。
  2. セッション バスやシステム バスとは異なる、独自の接続バスを作成します。最も簡単な方法は、dbus-launch を使用して、アプリケーションが接続できる新しいバスを作成することです。

以上がsystemd ユニットで dbus/systemd を依存関係として設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。