systemd:如何从第一次启动时自动启用服务?

systemd:如何从第一次启动时自动启用服务?

我正在使用 systemd 来处理一些任务,并且我有一个服务文件,一旦启用即可正常工作系统控制

现在,我想从第一次启动时自动启用它。

我知道将替换文件放入 中/etc/systemd/system/会将同名文件的行为替换为/lib/systemd/system/.

有没有一种方法可以自动启用服务文件,只需将其放在某个目录中?

答案1

重要的提示:以下内容适用于我在 Ubuntu 下的情况。它应该像 Debian 下一样工作。基于 RPM 的发行版防止默认情况下自动启动,但它仍然可以让您更接近目标。

在大多数情况下,您想要安装它在multi-user.target使用安装部分如下:

[Install]
WantedBy=multi-user.target

这意味着your-package.postinst脚本将自动为您启动守护进程。

请注意,如果您有自己的your-package.postinst脚本,则必须确保包含 Debian 帮助程序,如下所示:

#!/bin/sh

#DEBHELPER#

...your own script here...

如果没有该#DEBHELPER#模式,打包程序将不会添加默认代码,因此您的守护程序将不会自动启用和启动。添加的代码将启用并启动该服务:

systemctl enable <service-name>
systemctl start <service-name>

除非该服务static(没有[Install]如上所示的部分)。静态服务需要启用特殊的命令行,并且默认情况下不可用:

systemctl add-wants multi-user.target <service-name>

正如我们所看到的,该命令包含multi-user.target默认值#DEBHELPER#(systemd,实际上)不知道的内容,除非您有一个[Install]部分。


更新:在较新的版本中,systemd 扩展现在是安装机制的一部分,不再需要以下内容。对于 Ubuntu,我认为是从 22.04 开始的,也许是 21.10 开始的。

该包还必须使用扩展来构建systemd。这意味着您的debian/rules文件中包含以下内容:

%:
    dh $@ --with systemd --parallel

这应该能让你做好准备。


以防万一,如果你想的话不是启动新安装的服务,您实际上可以通过添加以下内容来防止这种情况:

override_dh_installsystemd:
    dh_installsystemd --no-start --no-disable

根据您的系统要求进行混合和匹配。

答案2

sudo systemctl enable <service-name>将在启动时启用服务。

http://www.dynacont.net/documentation/linux/Useful_SystemD_commands/有一个有用命令的列表。而且总是有man systemctlman systemd

答案3

你可以使用系统预设对于默认启用的单位。

Systems.preset 允许配置要启用/禁用的一组单元

vendor presetinsystemctl status unit指的是这个。

有关如何使用此链接的详细信息,请参阅链接的手册页

相关内容