如何在不使用'systemctl disable'的情况下禁用服务


12

我有一项服务仅在其他服务失败时才要运行([Unit] OnFailure=foo),但我不希望该服务(foo)在启动时自动启动。一个选项正在运行systemctl disable foo,但我正在寻找另一种方式。

背景:我正在创建一个OS映像,并且我不想启动计算机,运行该命令(systemctl disable foo),然后在声明最终映像之前将其关闭。

Answers:


4

默认情况下,所有服务都是“禁用”的;选择启用。

如果foo.service是您的自定义服务,那么除非它被某些内容(如OnFailure=指令)显式引入,否则它将不会启动,并且您不应“禁用”任何内容。


因此,基本上,除非先前已启用foo,否则您将“免费获得此功能”?
rogerdpack

26

systemctl enable通过操作/etc/systemd/system/(对于系统守护程序)中的符号链接来工作。当您enable使用服务时,它将查看WantedBy[Install]节中的各行,并在那些.wants目录中抓取符号链接。

systemctl disable 相反。

您只需删除这些符号链接-手工完成与使用完全等效systemctl disable


这将是尚未由systemd运行的服务(它是自定义的),因此不会有任何这些额外的符号链接。我猜那些会在第一次启动时创建?
tshepang 2015年

3
@Tshepang它不应该被启用,除非您手动启用它(或脚本,当然)
derobert

1
哦,我以为它会自动启用(这是我通过安装Debian软件包所期望的)。很高兴知道。
tshepang 2015年

3
@Tshepang是软件包中的postinst脚本,用于启用。或者我猜想将符号链接运送到包装中,不确定它们是否这样做。
derobert

4

您可以分别使用systemctl start ServiceName.servicesystemctl stop Service.Name.service启动和停止服务。与systemctl enable ...和相比systemctl disable ...,启动和停止命令仅在当前会话中有效,因此,当您重新引导计算机时,更改将不会保存。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.