如何创建名称与包名称不同的服务?
我正在准备一个包,它还提供一个服务文件(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
最后我通过以下配置解决了它:
包名称是 thunder-buildout-prod
debian/oooctl.service 如下
在 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.service
,mytool.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 进行测试。