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

Gus*_*uss 8 ubuntu systemd services deb

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

这些服务是使用我自己创建的 deb 包安装的。我通过添加和添加一个--with systemd来升级 deb 创建rulespackage-name.servicesystemd 单元规范。

我发现的问题是,即使我添加了一个[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)
Run Code Online (Sandbox Code Playgroud)

我的.bashrc 中没有任何 systemd 覆盖rules,正如我从带有 systemd 页面Debian 包装以及dh_systemd_enable 手册页中了解到的那样,如果我选择不启用,我可以使用它来启用服务。

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

sdu*_*hil 6

实际上,您不需要在override_dh_auto_install.

您需要--with systemdwith和之间没有破折号systemdrulesdh-systemd安装的软件包。

  • 不幸的是,这不是我的问题的答案 - 我已经这样做了,但结果是该服务已安装但未启用且未运行。除了手动编写 postinst 脚本之外,覆盖 `dh_auto_install` 来调用 `dh_sysyemd_enable` 和 `dh_systemd_start` 是我能找到的最好方法。 (2认同)

Gus*_*uss 4

我通过从规则中的 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
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,无论如何,使用“--with-systemd”默认总是启用+启动,因此您不必手动执行此操作。sduthil 的回答更有意义。但是,您的“postinst”脚本可能缺少“#DEBHELPER#”(请参阅​​ https://unix.stackexchange.com/questions/423069/postinst-maintainer-script-stops-systemd-unit-file-from-starting-自动-o/423078) (2认同)