Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
10.6.5. インスタンス化されたユニットの使用
ランタイム時に、1 つのテンプレート設定ファイルから複数のユニットをインスタンス化できます。@文字は、テンプレートにマークを付け、ユニットをこれに関連付けるために使用されます。インスタンス化されたユニットは、(Requires
オプションまたは Wants
オプションを使用して) 別のユニットから開始することも、systemctl start
コマンドで開始することもできます。インスタンス化されたサービスユニットの名前は以下のような形式となります。
template_name@instance_name.service
ここで、template_name は、テンプレート設定ファイルの名前になります。instance_name を、ユニットインスタンスの名前に置き換えます。複数のインスタンスが同じテンプレートファイルを参照し、このテンプレートには、ユニットの全インスタンスに共通する設定オプションが含まれます。テンプレートユニットの名前には以下の形式が使用されます。
unit_name@.service
たとえば、ユニットファイルに次の Wants
設定を指定すると、
Wants=getty@ttyA.service,getty@ttyB.service
この設定により、systemd が、最初に指定したサービスユニットを検索します。該当するユニットが見つからないと、@とタイプ接尾辞の間にある部分は無視され、systemd が getty@.service
ファイルを検索し、そこから設定を読み取り、サービスを起動します。
ワイルドカード文字 (ユニット指定子 とも呼ばれる) を、すべてのユニット設定ファイルで使用できます。ユニット指定子は、特定のユニットパラメーターを置き換え、ランタイム時に解釈されます。表10.14「重要なユニット指定子」 は、特にテンプレートユニットで便利なユニット指定子を一覧表示します。
表10.14 重要なユニット指定子
ユニット指定子 | 意味 | 説明 |
---|---|---|
| 完全ユニット名 |
タイプ接尾辞を含む完全ユニット名を表します。 |
| 接頭辞名 | タイプ接尾辞が削除されたユニット名を表します。インスタンス化されたユニットの %p は、ユニット名の@文字の前の部分を表します。 |
| インスタンス名 |
インスタンス化されたユニット名の@文字およびタイプ接尾辞間の部分です。 |
| ホスト名 | ユニット設定を読み込んだ時に稼働しているシステムのホスト名を表します。 |
| ランタイムディレクトリー |
ランタイムディレクトリーを表します。これは、 |
ユニット指定子の詳細な一覧は、man ページの systemd.unit(5)
を参照してください。
たとえば、getty@.service
テンプレートには以下のディレクティブが含まれます。
[Unit] Description=Getty on %I ... [Service] ExecStart=-/sbin/agetty --noclear %I $TERM ...
上記のテンプレートから getty@ttyA.service および getty@ttyB.service をインスタンス化する場合、Description
= は Getty on ttyA および Getty on ttyB として解決されます。