%i
別のテンプレートベースのサービスを参照するときは、テンプレートでインスタンス名指定子()を使用する必要がありますか、それともインスタンス名が推論されると仮定できますか?
たくさんはいこのパターン(例Requires=bottom@%i.service
:)に従いますが、これは%i
必ずしも必要ではなく、このパターンがなくてもすべてがうまく機能するようです。
> cd ~/.config/systemd/user
> cat [email protected]
[Unit]
# Wants=middle@%i.service
[email protected]
> cat [email protected]
[Unit]
# Requires=bottom@%i.service
[email protected]
[Service]
ExecStart=/usr/bin/sh -c "echo middle"
> cat [email protected]
[Service]
ExecStart=/usr/bin/sh -c "echo bottom"
> systemctl --user start [email protected]
> journalctl --user -f
Nov 17 22:21:02 miles-desk systemd[3064]: Starting [email protected]...
Nov 17 22:21:02 miles-desk sh[4010694]: bottom
Nov 17 22:21:02 miles-desk systemd[3064]: Starting [email protected]...
Nov 17 22:21:02 miles-desk systemd[3064]: Finished [email protected].
Nov 17 22:21:02 miles-desk sh[4010695]: middle
Nov 17 22:21:02 miles-desk systemd[3064]: Finished [email protected].
%i
テンプレートから指定子を省略しても安全ですか?それでは、なぜこの略語を含む例が見つからないのか混乱します。注意が必要な問題がありますか?これに関する使用説明書が見つかりませんでした。文書。
ベストアンサー1
Requires
他。テンプレートを直接処理します。
ソースユニットがテンプレートの場合、ターゲットもテンプレートであり、その場合、インスタンスはターゲットユニットに「伝播」して有効なユニットインスタンスを形成します。
テンプレート単位はテンプレート単位をリストすることもできます。この場合、リストされたユニットの各インスタンスが同じインスタンス値を持つリストされたテンプレートのインスタンスに依存関係を持つ汎用依存関係が追加されます。
したがって、この用途では省略するのが安全です%i
。