使用自定义命令创建服务以检查 systemd 的状态

使用自定义命令创建服务以检查 systemd 的状态

我有一个设置一些 iptables 规则的脚本 ( /bin/myrules)。

我使用这个单元文件通过 systemd 启动它myrules.service

[Unit]
Description=My Rules

[Service]
Type=oneshot
ExecStart=/sbin/myrules start
ExecStop=/sbin/myrules stop
RemainAfterExit=no

[Install]
WantedBy=multi-user.target

我想让 systemd 知道,在脚本执行并退出后,服务是“活动的”(如果 iptables 规则设置正确)。

我的脚本已经能够检查 iptables 规则的状态。跑步 :

/bin/myrules status

如果一切正常,将返回 0 退出代码。如果有错误,会返回1。

是否可以使systemctl status myrule命令调用我的特定脚本来检查状态是否正常并相应地返回消息?

编辑:我需要systemctl status myrules显示类似的东西

Active: active (whatever)

[编辑2] 但如果任何规则发生任何修改iptables应该重新检查如果所有规则都处于活动状态,然后显示

Active: inactive (whatever)

仅当它运行myrules status以检查服务状态时,这才是可能的。

PS:我不需要更多有关 iptables 的信息,我使用 -C 选项来检查

答案1

对于 oneshot 类型,systemd 将运行该进程,一旦返回,就认为该进程已完成并返回到非活动状态,或者即使RemainAfterExit=yes在进程退出后仍保持服务活动。

如果你的ExecStart脚本成功地改变了 iptables 配置,它应该成功exit 0,如果失败它应该exit 1。成功使用该RemainAfterExit=yes流程后exit 0,它将认为该服务处于活动状态。

您还可以使用ExecStartPost=运行 status 命令,如果 status 命令失败,这将导致服务失败。然而,这也意味着ExecStart必须中的命令exit 0

相关内容