好的,首先,我想实现一个 systemd 服务不会被垃圾收集,如果它被停止并且默认情况下没有启用。我需要这个,因为Prometheus的节点导出器当前存在用于监控目的的问题。
我确实已经实现了我的目标,但我不确定它为什么会起作用以及是否有可能的副作用。
例如,我在我的 Ubuntu 18.03 上安装了 ntp,禁用了该服务并停止了它。现在我想让我的节点导出器告诉我,ntp.service 是不活动的,但是 ntp get 的垃圾被 systemd 收集了。我读到,在这种情况下,可以通过在某处使用 ntp 作为依赖项来防止这种情况。使用Wants=
没有帮助,因为如果我的依赖服务重新启动,这将导致我的 ntp 重新启动。所以我做了一些实验,我创建了一个 test.target 文件,如下所示:
#/etc/systemd/system/test.target
[Unit]
Description=Testing purpose
After=ntp.service
[Install]
WantedBy=Multi-user.target
我启用了该服务并在禁用和停止 ntp 的情况下启动它。现在这是我的实际问题。即使 ntp.service 没有运行,我的 test.target 文件也确实被启用并且没有问题地启动。有趣的是,它也做了我想要的,ntp 不会被垃圾收集,即使它被禁用和停止。
所以我真的很想知道为什么会这样,为什么After=
get 被忽略了?