为什么有些单元文件名以@ 结尾?

Ear*_*ind 23 systemd systemd-unit

一些应用程序,如 ssh,有一个以 @ 结尾的单元文件,比如ssh.servicessh@.service。它们包含不同的内容,但我无法理解功能或目的究竟有何不同。

这是我不知道的一些命名约定吗?

tel*_*coM 32

正如其他人所提到的,它是一个服务模板。在 的特定情况下ssh@.service,它sshd仅用于按需调用,以经典inetd服务的风格。

如果您希望很少使用 SSH 连接,并希望绝对减少sshd的系统资源使用(例如在嵌入式系统中),您可以禁用常规ssh.service并启用ssh.socket. 每当检测到 TCP 端口 22(标准 SSH 端口)的传入连接时,套接字将自动启动ssh@.service(运行sshd -i)的实例。这将减慢 SSH 登录过程,但sshd在没有入站 SSH 连接时无需运行。


cam*_*amh 17

它是一个模板:https : //www.freedesktop.org/software/systemd/man/systemd.service.html#Service%20Templates

它通过创建指向unit@instance.type链接源所在位置的链接来实例化unit@.type。的值instance在 systemd 单元文件中可用%i%I,并允许您编写单个单元配置文件,该文件可以通过参数多次使用。

虽然最清晰的 systemd 文档是“服务模板”,但您可以对任何单元类型进行模板化,如 systemd.unit(5) 手册页中所述:https ://www.freedesktop.org/software/systemd/man/systemd .unit.html


Ste*_*itt 12

这些是服务模板,旨在使用参数实例化(因此服务是template@argumenttemplate@使用给定参数运行服务)。因此,可以在不同情况下使用单个服务定义,而无需任何硬编码的细节。

您将看到的典型实例化服务是每个文件系统服务,例如systemd-fsck@服务、每个设备getty、每个用户的用户管理器 ( user@) 等。它们可以以与非模板化服务相同的方式进行设置,使用systemctl enable等等,但许多是由其他服务动态实例化的。


小智 7

一些单元名称包含一个@符号(例如name@string.service):这意味着它们是模板单元的实例,其实际文件名不包含该string部分(例如name@.service)。string称为实例标识符,类似于使用systemctl命令调用时传递给模板单元的参数:在单元文件中,它将替换说明%i符。更准确地说,在尝试实例化name@.suffix模板单元之前,systemd 实际上会查找具有确切name@string.suffix文件名的单元 ,尽管按照惯例,这种“冲突”很少发生,即大多数包含@符号的单元文件都是模板。

来源