systemd 中的自动启动服务必须包含 [Install] 部分吗?

systemd 中的自动启动服务必须包含 [Install] 部分吗?

我在读https://www.freedesktop.org/software/systemd/man/systemd.service.html[Install]如果服务自动启动需要部分,则无法找到信息。

答案1

使某些程序在启动时执行的标准方法systemd是为其创建.service文件,将该文件放入对应目录systemctl enable <service>跑到使能够它用于启动序列。[Install]此处的部分是强制性的,因为它告诉您systemd应该在启动过程中的哪个时刻启动您的服务。你处理应该链接到一些通用启动目标例如multi-user.targetgraphical.target,或 到特殊目的目标(例如network-online.target),或自定义本地目标。

例子:

[Install]
WantedBy=multi-user.target

这里systemd将注入您的服务作为 的依赖项multi-user.target。每当目标启动systemd时就会启动您的服务。multi-user

systemd 读取其配置目录中的文件(或符号链接)以查看应按什么顺序启动哪些单元。systemctl enable为它已经知道的服务创建这样的符号链接,并将这些符号链接放置在应该启动服务的引导过程中的点(例如,在特殊的multi-user.target.wants/子目录中)。


操作系统还有另一种方式systemd在启动时启动自己的服务。这不是你应该做的事情,但由于问题是关于[Install]部分......

systemd一些称为“静态”单元的单元,它们不由systemctl enable( 或) 管理。它们在启动时通过( 而不是)systemctl disable中的硬编码符号链接启动,如果您在查看系统中的单元时遇到它们...请知道它们没有部分。/usr/lib/systemd/system//etc/systemd/system/[Install]

(你可以看到本论坛帖子中的讨论有关静态单位的更多详细信息。)

相关内容