
私はいくつかのセルテンプレートの多くのインスタンスを管理するプログラムを書いています。私の計画は、このためにsystemdのdbusサービスを使用することです。ただし、明らかにorg.freedesktop.systemd1.Managerのインターフェースは、すでにロードされているユニットまたはユニットのみを管理できます。文書。
ユニットファイルの使用方法は、テンプレートインスタンスの有効化または起動には機能しません。これは、正確に一致する名前のユニットファイルがないユニット名では機能しないため、一致するインスタンスに対応するテンプレートが見つからないためです。
ロードされたユニットで動作するメソッドでは、正確な名前のユニットをロードする必要がありますが、ユニットがまだインスタンス化されていないため、そうではありません。
また、インターフェース文書には実際にはテンプレートに関する内容は記載されていません。このインタフェースはsystemctl
コマンドほど強力でなければなりませんか?
インターフェイスについて私が何かを見逃しているのでしょうか?それともまだ見つからないテンプレート用のインターフェイスがありますか?それともsystemdでこれを行う方法はありませんか?
答え1
dbusのsystemdサービスは、テンプレート単位ファイルから開始されたサービスを完全に管理できます。したがって、テンプレート単位ファイル[email protected]
と具体的な名前のインスタンスがあると仮定して[email protected]
単位を起動する必要があります。
dbus-send --system --print-reply --dest=org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager.StartUnit string:'[email protected]' string:'replace'
メソッドを介してまだ実行されていない場合は、デバイスを有効にすることもできますorg.freedesktop.systemd1.Manager.EnableUnitFiles
。
セルオブジェクトパスに対するその他の操作の場合は、名前をdbus有効な名前に変換する必要があります[email protected]
。
/org/freedesktop/systemd1/unit/foo_40bar_2eservice
@
次のように翻訳_40
.
次のように翻訳_2e
_
次のように翻訳_5f
-
次のように翻訳_2d
しかし、この翻訳の完全なリストをどこで入手できるのかわかりません。
たとえば、ユニットと対話して属性を取得できます。
dbus-send --system --print-reply --dest=org.freedesktop.systemd1 /org/freedesktop/systemd1/unit/foo_40bar_2eservice org.freedesktop.DBus.Properties.Get string:'org.freedesktop.systemd1.Service' string:'MainPID'