如何对systemd服务ExecCondition中命令的退出码取反?
如何在systemd的ExecCondition中对命令退出码取反
在systemd配置里,直接在命令前加!无法实现退出码取反——因为systemd中!是特殊符号,作用是即使命令执行失败也继续后续操作,而非逻辑取反。以下是几种可行的解决方案:
方法1:通过shell执行取反命令
调用bash或sh,在shell环境中使用!完成逻辑取反,这样!会被shell解析,而非systemd:
[Service] Type=oneshot ExecCondition=/bin/bash -c '! /usr/bin/command' ExecStart=...
或者用更轻量的sh:
ExecCondition=/bin/sh -c '! /usr/bin/command'
方法2:通过判断退出码实现取反
显式检查原命令的退出码,当退出码不为0时返回成功:
ExecCondition=/bin/sh -c '/usr/bin/command; test $? -ne 0'
方法3:指定允许的成功退出码(适用于固定退出码场景)
如果原命令失败时返回固定的非0退出码(比如1),可以直接用ExitCodeSuccess指定该退出码为ExecCondition的成功条件:
ExecCondition=/usr/bin/command ExitCodeSuccess=1
如果原命令可能返回多个非0退出码,可列出所有允许的值:
ExitCodeSuccess=1 2 3
注:systemd的ExecCondition默认以退出码0为执行成功,以上方法均是为了实现“原命令成功则ExecCondition失败,原命令失败则ExecCondition成功”的逻辑。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

