阻止服务启动

时间:2015-09-23 13:24:44

标签: linux systemd

我们的想法是创建一个永不开始的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无论如何都要开始。那是为什么?

1 个答案:

答案 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