我正在创建一个 debian 包,其中包含一个服务和一些 shell 脚本,并且还想在 /lib/systemd/system 文件夹中安装一个计时器,以便定期调用该服务。
根据 debian 帮助指南 https://manpages.debian.org/testing/debhelper/dh_systemd_enable.1.en.html 这可以通过简单地在 debian 文件夹中创建 package.timer 文件和 package.service 文件来实现,并且在构建时它将自动包含在包中(sudo debuild -us -uc -d)。
当我构建时,仅包含并安装服务,而不包含计时器文件。有关信息,我可以添加一个 package.socket 文件,该文件会被包含在内,但不会包含 timer 或 tmpfile 。我希望有一个人可以帮助我。
为了便于说明,我的一些包文件如下。
你好世界.service
[Unit]
Description=Hello world service.
[Service]
Type=oneshot
ExecStart=/bin/echo HELLO WORLD!
[Install]
WantedBy=default.target
你好世界.定时器
[Unit]
Description=Timer for periodic execution of hello-world service.
[Timer]
OnUnitActiveSec=5s
OnBootSec=30s
[Install]
WantedBy=timers.target
控制文件
Source: hello-world
Maintainer: Joe Bloggs <[email protected]>
Section: misc
Priority: optional
Standards-Version: 1.0.0
Build-Depends: debhelper (>= 9), dh-systemd (>= 1.5)
Package: hello-world
Architecture: amd64
Depends:
Description:
Hello world test app.
规则文件
#!/usr/bin/make -f
%:
dh $@ --with=systemd
override_dh_auto_build:
echo "Not Running dh_auto_build"
override_dh_auto_install:
echo "Not Running dh_auto_install"
override_dh_shlibdeps:
echo "Not Running dh_shlibdeps"
override_dh_usrlocal:
echo "Not Running dh_usrlocal"
答案1
对于自动定时器支持,您需要dh_installsystemd
,它在 debhelper 兼容性级别 11 及更高版本中可用。您应该使用12级或以上。在您的文件中指定control
:
Build-Depends: debhelper-compat (= 12)
删除该compat
文件,并更改您的rules
以省略显式systemd
序列:
%:
dh $@
Debhelper 兼容性级别 12 在 Debian 10 及更高版本中可用,在 Debian 9 中可通过向后移植获得。如果您需要使用较旧的级别,则必须手动安装支持文件,例如在anacron
:
override_dh_auto_install:
...
install -D -m 644 debian/anacron.timer debian/anacron/lib/systemd/system/anacron.timer
答案2
请注意,如果您需要沿着此计时器安装 2 个服务,您需要/可以在以下位置覆盖它override_dh_installinit
:
override_dh_installinit:
dh_installinit --name=anacron
dh_installinit --name=anacron-service2
install -D -m 644 debian/anacron.timer > debian/anacron/lib/systemd/system/anacron.timer