我有一个 ansible 角色(历史继承)来为 RHEL8 配置 nftables,我一直在尝试理解它。它正在复制 nftables.service 的 systemd 文件,该文件包含以下节:
[Service]
Type=oneshot
RemainAfterExit=yes
StandardInput=null
ProtectSystem=full
ProtectHome=true
ExecStart=/sbin/nft -f /etc/sysconfig/nftables.conf
ExecReload=/sbin/nft 'flush ruleset; include "/etc/sysconfig/nftables.conf";'
ExecStop=/sbin/nft flush ruleset
我试图理解ExecStart
正在做什么与ExecReload
execstart 之间的区别,这似乎很简单 - 它通过标志自动运行配置-f
。但我不明白这与 有何不同ExecReload
。不是/sbin/nft 'flush ruleset; include "/etc/sysconfig/nftables.conf";'
原子的吗?
/etc/sysconfig/nftables.conf内容如下:
#!/usr/sbin/nft -f
# clean
flush ruleset
include "/etc/nftables/defines.nft"
table inet filter {
chain global {
# 005 state management
ct state established,related accept
ct state invalid drop
}
include "/etc/nftables/sets_role_haproxy_cvp_apps.nft"
include "/etc/nftables/sets.nft"
include "/etc/nftables/helpers.nft"
include "/etc/nftables/filter-forwared.nft"
include "/etc/nftables/filter-input.nft"
include "/etc/nftables/filter-output.nft"
include "/etc/nftables/input_role_haproxy_cvp_apps.nft"
}
因此,在我看来,这两者ExecStart
似乎ExecReload
在做同样的事情 - 两者都会刷新规则集。 ansible 的作者评论说“如果添加了无效语法,重新加载将避免丢失 Nftables 规则库”。如果它刷新规则集,我不明白它是如何做到这一点的?有人可以解释一下吗?
谢谢J