特定のアプリケーションが実行されている場合にのみデーモンを実行する方法は?

特定のアプリケーションが実行されている場合にのみデーモンを実行する方法は?

maxwell他のアプリケーション()のDバス信号に基づいてさまざまなタスクを実行するユーザースペースデーモン()がありますroommaxwellユーザーが起動するとすぐに実行し、終了時にroom停止したいと思いますroom

私はこのようなランチャースクリプトが望ましい動作を生成すると思います。

#!/bin/sh

systemctl --user start maxwell
room
systemctl --user stop maxwell

しかし、例えばsystemd自体を介してこれを行うより良い/標準的な方法はありますか?

修正する:私が探している機能は、upstart過去に提供したものと似ているようです。バスイベントsystemdStephen Kittの答えによると、達成できる最も近いのは、特定のDバス名が最初に使用されたときに残念ながら、この場合、名前をroom「所有」するサービスを自動的に開始するようです。


メモ:私の考えでは、これは何の関係もないようです。systemdには「システムではなくいくつかのプロセス」が必要ですか?または、少なくともそこに提供された答えがこの場合に機能します。私が理解したように、を使用すると、単位は次のように表示されExecStartPreます。maxwell失敗roomまだ実行されていない場合。

答え1

システムサポートDバスアクティブ、D-Busメソッド呼び出しをサービスするサービスを開始します。これがユーザーサービスに移植可能かどうかはわかりません。システムサービスの場合は、D-Busサービスファイルを作成します。

[D-BUS Service]
Name=your.bus.name
Exec=/path/to/the/daemon
User=root
SystemdService=systemd-service-name.service

そして、一致するバス名を指定する必要がある対応するsystemdサービス:

[Service]
BusName=your.bus.name

指定するBusNameこれにより、そのサービスがD-Busサービスとして自動的に表示されます。

すべてをユーザーサービスとしてインストールすることは可能ですが(UserD-Busサービスファイルと一致するように変更)、まだ試していません。

関連情報