Sshなどの一部のアプリケーションには、ssh.service
や[email protected]
などの@で終わるユニットファイルがあります。内容は異なりますが、機能や目的の違いが何なのか正確にはわかりません。
私が知らない命名規則ですか?
他の人が述べたように、それはサービステンプレートです。 [email protected]
の特定のケースでは、従来のsshd
サービスのスタイルで、オンデマンドでのみinetd
を呼び出すためのものです。
SSH接続がほとんど使用されないことが予想され、sshd
のシステムリソースの使用を完全に最小限にしたい場合(組み込みシステムなど)、通常のssh.service
を無効にし、代わりにssh.socket
を有効にします。ソケットは、TCPポート22(標準のSSHポート))への着信接続が検出されるたびに、[email protected]
(sshd -i
を実行)のインスタンスを自動的に起動します。これにより、SSHログインプロセスが遅くなりますが、インバウンドSSH接続がない場合にsshd
を実行する必要がなくなります。
これはテンプレートです: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Service%20Templates
[email protected]
へのリンクを作成することでインスタンス化されます。リンクソースは[email protected]
です。 instance
の値は、%i
または%I
を使用してsystemdユニットファイルで使用でき、パラメーターを使用して複数回使用できる単一のユニット構成ファイルを書き込むことができます。
このための最も明確なsystemdドキュメントは「サービステンプレート」ですが、systemd.unit(5)のマニュアルページで説明されているように、任意のユニットタイプをテンプレート化できます。 https://www.freedesktop.org/software/systemd /man/systemd.unit.html
これらは サービステンプレート であり、引数でインスタンス化されるように設計されています(したがって、サービスはtemplate@argument
であり、指定された引数でtemplate@
サービスを実行しています)。したがって、ハードコードされた詳細を必要とせずに、単一のサービス定義をさまざまな状況で使用できます。
表示される典型的なインスタンス化されたサービスは、systemd-fsck@
サービス、デバイスごとのgetty
s、各ユーザーのユーザーマネージャー(user@
)などのファイルシステムごとのサービスです。テンプレート化されていないサービスと同じ方法でsystemctl enable
などを使用して設定できますが、多くは他のサービスによって動的にインスタンス化されます。
一部のユニット名には
@
記号が含まれています(例:[email protected]
):これは、実際のファイル名にstring
部分(例[email protected]
)。string
はインスタンス識別子と呼ばれ、systemctlコマンドで呼び出されたときにテンプレートユニットに渡される引数に似ています:ユニットファイル内%i
指定子を置き換えます。より正確に言うと、[email protected]
テンプレートユニットをインスタンス化する前に、systemdは実際に正確な[email protected]
ファイル名を持つユニットを探しますが、慣例により、このような「衝突」はめったに起こりません。@
記号を含むファイルは、テンプレートとして使用するためのものです。