有一个服务我只想在另一个服务失败时才运行 ( [Unit] OnFailure=foo
),但我不希望该服务 ( foo
) 在启动时自动启动。一个选项是 running systemctl disable foo
,但我正在寻找另一种方法。
背景:我正在创建操作系统映像,并且我不想在systemctl disable foo
宣布我的映像最终之前启动计算机,运行该命令 ( ),然后将其关闭。
答案1
systemctl enable
通过操作/etc/systemd/system/
(对于系统守护进程)中的符号链接来工作。当您enable
使用服务时,它会查看WantedBy
该部分中的行,并在这些目录[Install]
中添加符号链接。.wants
systemctl disable
则相反。
您可以直接删除这些符号链接 - 手动执行此操作完全等同于使用systemctl disable
.
答案2
默认情况下所有服务都是“禁用”的; “启用”是选择加入。
如果foo.service
是您的自定义服务,那么除非被某些东西(如指令)明确拉入,否则它不会启动OnFailure=
,并且您不应该“禁用”任何东西。
答案3
您可以使用systemctl start ServiceName.service
和systemctl stop Service.Name.service
分别启动和停止服务。与systemctl enable ...
和相比systemctl disable ...
,启动和停止命令仅持续当前会话,因此当您重新启动计算机时,更改将不会被保存。
答案4
还有屏蔽和取消屏蔽的选项,但应该由具有更多经验和知识的人来解释,而不是我。
sudo systemctl 掩码服务到掩码 sudo systemctl 取消屏蔽取消屏蔽服务
我希望这是正确的。但为了完整起见,此类事情需要包含在这次对话中。
掩蔽使用转移,/dev/null
这非常好。
如果我没记错的话,可以在同一个会话中停止、禁用和屏蔽服务。