创建包时更改服务文件的名称

创建包时更改服务文件的名称

如何创建名称与包名称不同的服务?

我正在准备一个包,它还提供一个服务文件(systemd 配置),该文件的名称应该与包不同。

目前我添加了一个文件 debian/pkg_name.service 并且它可以工作,但是名称并未反映已启动的服务。

我已经注意到dh_installinit有一个--name选项,但是手册页列出了

debian/package.name.init、debian/package.name.default 和 debian/package.name.upstart 而不是通常的 debian/package.init、debian/package.default 和 debian/package.upstart

但不是 package.service。此外,我还不太明白应该把这行放在哪里。目前我的 debian/rules 有

%:
        dh  $@ --with bash-completion --with systemd

答案1

最后我通过以下配置解决了它:

  1. 包名称是 thunder-buildout-prod

  2. debian/oooctl.service 如下

  3. 在 debian/rules 中:

%:
  dh  $@ --with bash-completion --with systemd --with python2

override_dh_systemd_enable:
  dh_systemd_enable -p thunder-buildout-prod debian/oooctl.service

override_dh_systemd_start:
  dh_systemd_start -p thunder-buildout-prod debian/oooctl.service

最后要说的是,在 /etc/init.d/oooctl 中有一个脚本(注意:与服务同名),该脚本提供 /lib/lsb/init-functions,这足以让它作为对 systemctl start/stop/status oooctl.service 的调用,而忽略脚本的其余部分

答案2

根据dh_systemd_enable手册https://manpages.debian.org/testing/debhelper/dh_systemd_enable.1.en.html

--name=name
    Install the service file as name.service instead of the default 
    filename, which is the package.service. When this parameter is 
    used, dh_systemd_enable looks for and installs files named 
    debian/package.name.service instead of the usual debian/package.service.

我发现您还需要将名称传递给dh_installinit。例如,如果您的包名为“mytool”,但您希望您的服务文件不是mytoolsrv.servicemytool.service您可以创建文件debian/tool.toolsrv.service并将以下内容放入debian/rules文件中:

#!/usr/bin/make -f

%:
    dh $@

override_dh_systemd_enable:
    dh_systemd_enable --name=mytoolsrv

override_dh_installinit:
    dh_installinit --name=mytoolsrv

已使用debhelper兼容性级别 10 进行测试。

相关内容