自动启用使用 deb 安装的 systemd 服务?

自动启用使用 deb 安装的 systemd 服务?

我正在构建一堆服务来安装在我自己的(自动创建的)服务器上。我正在从 Ubuntu 14.04 上的新贵迁移到 Ubuntu 16.04,其中默认启用服务(如果我们不想在安装时启动,我们必须做额外的工作),我们希望使用 systemd 作为新的本机服务框架。

这些服务是使用我自己创建的 deb 包安装的。我通过--with systemd添加rules和添加package-name.service带有 systemd 单元规范的文件来升级 deb 创建。

我发现的问题是,即使我添加[Install]带有 的部分WantedBy=multi-user.target,该服务也不会在系统上启动。

相反,该服务会被安装,然后systemctl status package-name显示:

● package-name.service - My Service
   Loaded: loaded (/lib/systemd/system/package-name.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

我的 中没有任何 systemd 覆盖rules,正如我从带有 systemd 页面的 Debian 打包以及dh_systemd_enable 手册页我可以用不是如果我选择不启用服务。

另外,从状态显示的外观来看,似乎dh-systemd确实启用了服务(供应商预设位),但这还不够。我缺少什么?

答案1

事实上,你不需要添加任何东西override_dh_auto_install

您需要(没有和--with systemd之间的破折号)在和 安装的软件包中。withsystemdrulesdh-systemd

答案2

我通过从规则中的 override_dh_auto_install 目标手动调用 dh_systemd_enable (使服务默认运行)和 dh_systemd_start (在安装后实际启动它)来解决这个问题,所以它看起来像这样:

%:
    dh $@ --with-systemd

override_dh_auto_install:
    dh_auto_install
    dh_systemd_enable || true
    dh_systemd_start || true

答案3

我也遇到了这个问题。事实证明,它对文件dh_systemd_enable的内容有一定的期望foo.service

你可以在第 187-215 行看到这一点deb-systemd-helper

特别是,确保foo.service文件有一个[Install]部分并且至少有一个Alias别名不等于的字段foo.service将导致调用deb-systemd-helper enable检测所需的服务。如果您希望服务自动启动,WantedBy=multi-user.target还需要添加。

foo.service以下是我的文件的轻微修改版本:

[Unit]
Description=foo service, foos
After=bar.service
Requires=bar.service

[Service]
ExecStart=/path/to/my/script/foo
Restart=always
RestartSec=5

[Install]
Alias=foo
WantedBy=multi-user.target

我能够通过启用几个调试标志并在deb-systemd-helperperl 脚本中添加调试语句来确定这一点。在 Ubuntu 16.04 系统上,我在这里找到了它:/usr/bin/deb-systemd-helper

因此,反复运行以下命令并添加调试语句让我找到了问题的根源。

$ sudo DPKG_MAINTSCRIPT_PACKAGE=1 _DEB_SYSTEMD_HELPER_DEBUG=1 deb-systemd-helper enable foo.service

答案4

我刚刚遇到这个问题,即使我有所需的 [Install] 部分,默认情况下它仍然不会启用该单元。

解决方案是将 .service 文件的 Windows 结尾转换为 UNIX 结尾:

dos2unix my.service

相关内容