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

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

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

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

答え1

他の人が述べたように、これはサービステンプレートです。場合によっては、クラシックサービス方式で要求時に呼び出す[email protected]ためにのみ使用されます。sshdinetd

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

答え2

テンプレートは次のとおりです。https://www.freedesktop.org/software/systemd/man/systemd.service.html#Service%20テンプレート

[email protected]リンクソースの場所へのリンクを作成してインスタンス化します[email protected]。システム単位ファイルを使用または使用instanceでき、パラメーターと共に複数回使用できる単一の単位構成ファイルを作成できます。%i%I

systemdの最も明確な文書は「サービステンプレート」ですが、systemd.unit(5)のマニュアルページに記載されているように、すべての単位タイプをテンプレートとして指定できます。https://www.freedesktop.org/software/systemd/man/systemd.unit.html

答え3

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

インスタンス化された一般的なサービスは、systemd-fsck@サービス、デバイス固有getty、ユーザー固有のユーザーマネージャ(user@)などのファイルシステム固有のサービスです。テンプレート以外のサービスと同じ方法で設定、使用などが可能ですsystemctl enableが、ほとんどは他のサービスによって動的にインスタンス化されます。

答え4

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

源泉

関連情報