我们的想法是创建一个永不开始的keep-down.service
:
[Unit]
Description=Keeps daemon down
Before=mydaemon.service
ConditionPathIsDirectory=/var/lib/dummy-never-existing-path
[Service]
ExecStart=/bin/true
[Install]
WantedBy=multi-user.target
因此mydaemon.service
需要它。安装keep-down.service
时,mydaemon.service
无法启动(理论上)。
动机:
systemctl
个命令可以启动mydaemon.service
mydaemon.service
单元文件mydaemon.service
keep-down.service
自定义包问题是mydaemon.service
无论如何都要开始。那是为什么?
答案 0 :(得分:1)
您已指定keep-down
服务必须在 mydaemon.service
之前启动:
Before=mydaemon.service
但是你实际上并没有在两者之间配置任何依赖关系,例如:
RequiredBy=mydaemon.service
详细信息位于systemd.unit
手册页中,例如说明Before=
和After=
:
请注意,此设置独立于和正交 由Requires =配置的需求依赖项。这很常见 模式在After =和Requires =中包含一个单位名称 选项,在这种情况下,列出的单位将在之前开始 使用这些选项配置的单位。
然而,所有这些都是不必要的。您可以使用systemctl mask
命令完成:
mask NAME...
Mask one or more unit files, as specified on the command line. This
will link these units to /dev/null, making it impossible to start
them. This is a stronger version of disable, since it prohibits all
kinds of activation of the unit, including enablement and manual
activation. Use this option with care. This honors the --runtime
option to only mask temporarily until the next reboot of the
system. The --now option can be used to ensure that the units are
also stopped.
所以:
# systemctl mask mydaemon