我知道systemctl enable iptables
与命令类似chkconfig --level 5 iptables on
,但两者并不完全相同。
使用systemctl
,我们如何限制服务仅在给定目标(例如graphical.target)上启动。
答案1
这就是单元文件中的WantedBy=
和RequiredBy=
指令的用途:systemd
通缉者=, 必填者=
该选项可以多次使用,或者可以给出以空格分隔的单位名称列表。当通过 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。