同じインスタンス指定子を使用して複数のシステム単位ファイルをアクティブにするには?

同じインスタンス指定子を使用して複数のシステム単位ファイルをアクティブにするには?

インスタンス化されたシステムサービスを有効にするたびに、同じインスタンス指定子を使用して2つのタイマーを有効にしたいと思います。これは私のユニットファイルです[Eメール保護]良い:

[Unit]
Description=Does something cool
Documentation=man:foo(1)

[Service]
Type=forking
ExecStart=/usr/bin/foo %i
PIDFile=%t/foo/foo.pid
StandardOutput=journal

[Install]
WantedBy=network-online.target
Also=bar1@%i.timer
Also=bar2@%i.timer

実行結果:systemctl enable [email protected]

Failed to enable unit: Invalid argument

[Install]セクションでインスタンス指定子を削除し、それを特定のインスタンス名(下図のように)に変更すると正常に動作します。

...
[email protected]
[email protected]

マニュアルページシステムユニット(5)説明する%私指定子はインストール部分で説明しましたが、何が与えられますか?

The following specifiers are interpreted in the Install section: %n, %N, %p, %i, %U, %u, %m, %H, %b, %v.

答え1

これはsystemdのバグであるように見え、セクションのAlsoディレクティブで再現されます[Install]

ただし、回避策を使用して同じ機能を提供できます。

ファイルがあり、対応する[email protected]ユニットファイルが必要であるとしましょう。代わりに、このセクションをディレクティブに追加してくださいWantedBy.timerまず、背面を使用してデバイスをアクティブにします。systemctl enable [email protected]

[Install]
WantedBy=network-online.target bar1@%i.timer bar2@%i.timer

上記のコードは、ソケットアクティベーションを介して複数のmpdサービスを開始するために、サービステンプレートと複数のソケットファイルを使用して正しく機能します。

関連情報