“chkconfig --level 5 iptables on”等命令的 systemctl 等效项是什么

“chkconfig --level 5 iptables on”等命令的 systemctl 等效项是什么

我知道systemctl enable iptables与命令类似chkconfig --level 5 iptables on,但两者并不完全相同。

使用systemctl,我们如何限制服务仅在给定目标(例如graphical.target)上启动。

答案1

这就是单元文件中的WantedBy=RequiredBy=指令的用途:systemd

man systemd.unit:

通缉者=, 必填者=

该选项可以多次使用,或者可以给出以空格分隔的单位名称列表。当通过 systemctl enable 安装此单元时,会在每个列出的单元的 .wants/ 或 .requires/ 目录中创建一个符号链接。这具有将 Wants= 或 Requires= 类型的依赖项从列出的单元添加到当前单元的效果。主要结果是当前单元将在列出的单元启动时启动。详细信息请参见[Unit]部分中Wants=和Requires=的描述。

因此,创建的符号链接是systemd在目标/单元启动时启动给定单元的原因。


例如:

[Install]
WantedBy=graphical.target

graphical.target将导致该单元仅在运行时启动(如果该单元已启用)。


另一个例子:

[Install]
WantedBy=my-custom-target.target graphical.target

my-custom-target.target会导致设备在或运行时启动graphical.target(如果设备已启用)。


最后要记住的一件事是,将事物限制为单个目标可能很困难,因为某些目标依赖于其他目标。例如,graphical.target Requires=multi-user.target,因此当graphical.target启动时,所有单元multi-user.target也会启动。请记住,某些目标是建立在其他目标之上的,而建立在之上的目标将从它们所依赖的目标中获取一切。

答案2

没有直接等价于chkconfig --level 5 iptables on.继续用旧的 sysvinit 来思考是没有意义的并且令人困惑。systemd 中没有运行级别这样的东西。

也就是说,您可以通过在服务的 [Install] 部分中使用 WantedBy=graphical.target 来要求服务管理器仅在达到 Graphical.target 时启动 iptables。

相关内容