-1

好的,首先,我想实现一个 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 被忽略了?

4

1 回答 1

0

After=不会被忽略,它会导致加载systemd单元(如果尚未加载)并且还会阻止垃圾收集。After=并不意味着它会启动ntp.service,因为你应该使用Requires=.

检查Unit Garbage CollectionRequiresAfter

于 2019-10-30T21:01:11.793 回答