![systemd 服务 A 有“冲突=B”。 A 和 B 均已启用。您能否判断哪些服务将被允许在启动时启动(如果有的话),还是随机的?](https://linux22.com/image/145379/systemd%20%E6%9C%8D%E5%8A%A1%20A%20%E6%9C%89%E2%80%9C%E5%86%B2%E7%AA%81%3DB%E2%80%9D%E3%80%82%20A%20%E5%92%8C%20B%20%E5%9D%87%E5%B7%B2%E5%90%AF%E7%94%A8%E3%80%82%E6%82%A8%E8%83%BD%E5%90%A6%E5%88%A4%E6%96%AD%E5%93%AA%E4%BA%9B%E6%9C%8D%E5%8A%A1%E5%B0%86%E8%A2%AB%E5%85%81%E8%AE%B8%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%90%AF%E5%8A%A8%EF%BC%88%E5%A6%82%E6%9E%9C%E6%9C%89%E7%9A%84%E8%AF%9D%EF%BC%89%EF%BC%8C%E8%BF%98%E6%98%AF%E9%9A%8F%E6%9C%BA%E7%9A%84%EF%BC%9F.png)
在 Debian 9 上安装该firewalld
软件包也会拉入该ebtables
软件包。这会向系统添加两项服务,firewalld
并且ebtables
.与往常一样,Debian 启用这两项服务。
firewalld.service
被标记为Conflicts=ebtables.service
.
当系统启动时这两个服务会发生什么?我能知道两者中的哪一个可以运行吗?或者两者都不被允许运行?
答案1
如果与单元 B 冲突的单元 A 计划与 B 同时启动,则事务将失败(如果两者都是事务的一部分)或修改为固定(如果其中一个或两个都需要)工作不是交易的必需部分)。在后一种情况下,不需要的作业将被删除,或者如果两者都不需要,则将启动冲突的单元并停止冲突的单元。
--man 系统单元
在这种情况下, 和 都firewalld.service
只是ebtables.service
,WantedBy=multi-user.target
而不是RequiredBy=
。
结论: firewalld.service
会启动,也ebtables.service
不会启动。
这不会告诉您安装后立即发生的情况firewalld
。幸运的是,结果是相同的,因为ebtables
先安装了。这个顺序的意思是暂时启动,但启动ebtables.service
后又停止:firewalld.service
如果一个单元在另一个单元上有 Conflicts= 设置,则启动前者将停止后者,反之亦然。