好的,首先,我要确保systemd服务不会被垃圾收集,如果该服务已停止且默认情况下未启用。我需要这样做是因为current problem with the node exporter 中的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=
会被忽略?
After=
未被忽略,这导致systemd
加载单元(如果尚未加载),并且还阻止了垃圾回收。After=
并不意味着它将以ntp.service
开头,因此您应该使用Requires=
。