7

dbus 呼び出しを介してアクティブにしたい新しい systemd サービスを作成しました。サービスはシェル スクリプトを実行するだけです。

ここでサービスを定義しました:

/lib/systemd/system/testamundo.service


[Unit]
Description=Testamundo

[Service]
Type=dbus
BusName=org.freedesktop.testamundo
ExecStart=/home/test/systemd/testamundo.sh

また、ここで D-Bus サービスを定義しました。

/usr/share/dbus-1/system-services

[D-BUS Service]
Name=org.freedesktop.testamundo
Exec=/usr/sbin/console-kit-daemon --no-daemon
User=root
SystemdService=testamundo.service

gdbus を使用して起動しようとしていますが、これは使用しようとしているコマンドです。

sudo gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedesktop/systemd1 --method org.freedesktop.systemd1.StartUnit "org.freedesktop.testamundo"

上記のように --system を使用すると、コマンドは Unknown Method エラーで戻ります。 --session を使用すると、子プロセスからの終了コード 1 で戻ります。--session と --system を指定して journalctl を見ると、コマンドが表示されますが、それ以上の追加情報はありません。

ご意見やアドバイスをいただければ幸いです。

4

1 に答える 1

5

dbus コマンドが存在しないインターフェイスを使用しています。そもそもorg.freedesktop.systemd1.Manager.Startユニットじゃないorg.freedesktop.systemd1.StartUnit。次に、org.freedesktop.systemd1.Manager.Startサービス名と開始モードの 2 つのパラメーターが必要です。参照: http://www.freedesktop.org/wiki/Software/systemd/dbus/

dbus サービスを定義しましたが、systemd にサービスを有効にするように直接要求して dbus をバイパスしています。その他の注意点として、dbus は実際にはメソッド呼び出しではなく systemd にシグナルを送信します。

サービスのイントロスペクションを行うだけの場合は、すべてが整っています。サービスを有効にする必要があります。

sudo gdbus call --system --dest org.freedesktop.testamundo --object-path /org/freedesktop/testamundo --method org.freedesktop.DBus.Introspectable. Introspect
于 2015-07-30T13:39:50.717 に答える