web-dev-qa-db-ja.com

一部のユニットファイル名が@で終わるのはなぜですか?

Sshなどの一部のアプリケーションには、ssh.service[email protected]などの@で終わるユニットファイルがあります。内容は異なりますが、機能や目的の違いが何なのか正確にはわかりません。

私が知らない命名規則ですか?

23
EarthMind

他の人が述べたように、それはサービステンプレートです。 [email protected]の特定のケースでは、従来のsshdサービスのスタイルで、オンデマンドでのみinetdを呼び出すためのものです。

SSH接続がほとんど使用されないことが予想され、sshdのシステムリソースの使用を完全に最小限にしたい場合(組み込みシステムなど)、通常のssh.serviceを無効にし、代わりにssh.socketを有効にします。ソケットは、TCPポート22(標準のSSHポート))への着信接続が検出されるたびに、[email protected]sshd -iを実行)のインスタンスを自動的に起動します。これにより、SSHログインプロセスが遅くなりますが、インバウンドSSH接続がない場合にsshdを実行する必要がなくなります。

31
telcoM

これはテンプレートです: 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

17
camh

これらは サービステンプレート であり、引数でインスタンス化されるように設計されています(したがって、サービスはtemplate@argumentであり、指定された引数でtemplate@サービスを実行しています)。したがって、ハードコードされた詳細を必要とせずに、単一のサービス定義をさまざまな状況で使用できます。

表示される典型的なインスタンス化されたサービスは、systemd-fsck@サービス、デバイスごとのgettys、各ユーザーのユーザーマネージャー(user@)などのファイルシステムごとのサービスです。テンプレート化されていないサービスと同じ方法でsystemctl enableなどを使用して設定できますが、多くは他のサービスによって動的にインスタンス化されます。

12
Stephen Kitt

一部のユニット名には@記号が含まれています(例:[email protected]):これは、実際のファイル名にstring部分(例[email protected])。 stringインスタンス識別子と呼ばれ、systemctlコマンドで呼び出されたときにテンプレートユニットに渡される引数に似ています:ユニットファイル内%i指定子を置き換えます。より正確に言うと、[email protected]テンプレートユニットをインスタンス化する前に、systemdは実際に正確な[email protected]ファイル名を持つユニットを探しますが、慣例により、このような「衝突」はめったに起こりません。 @記号を含むファイルは、テンプレートとして使用するためのものです。

ソース

7