You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:22:35