我正在编写一个可以使用 systemctl 命令启动或停止的 systemd 服务。
然而,这个程序也可以返回几个返回码,我想处理这些返回码。
例如,如果服务被停止,systemctl stop <service>
它应该什么都不做。但是,如果它没有被 systemctl 杀死并自行返回,我想运行一个 post 脚本,我可以在该脚本上获取返回码并根据其值执行操作。
在@NarūnasK 回答之后修改
当系统版本 >= v232 时,@NarūnasK 回答没问题
但是,当没有好的 systemd 版本时,怎么办?
我虽然关于做类似的事情
ExecStart=/bin/sh -c '<service> -C /etc/<service_conf_file>; [ $? -eq 1 ] && { <action> }'
ExecStopPost=应该做你想做的事。
在您的脚本中,您可以读取
$EXIT_CODE
或$EXIT_STATUS
环境变量并采取适当的措施。编辑
您可以将以下解决方法与
systemd < 232
.示例脚本:
退出处理程序:
示例脚本服务:
sample_script.service的状态:
你可以看到它
exit_handler
被调用了两次。首先从bash
那里提供了退出代码,然后作为ExecStopPost=
脚本,没有提供退出代码的位置参数,因此它打印 N/A。