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

如何在Bash脚本中循环等待命令返回零退出码?

Bash脚本正确实现

你可以直接使用下面的脚本完成需求:

#!/bin/bash
# 执行supervisor重载
supervisorctl reload

# 轮询检测状态,直到返回0退出码
until supervisorctl status; do
    sleep 1
done

实现说明

  • 核心用Bash原生的until循环实现逻辑:until会反复执行后面的命令,仅当命令退出码为0时终止循环,完全匹配需求,比手动写while循环判断$?返回值更简洁可靠。
  • 循环内加sleep 1是必须的优化:如果不加间隔,脚本会无间断高频调用supervisorctl,平白消耗CPU和supervisor的socket连接资源,你可以根据实际场景调整间隔时长,比如服务启动慢就改成sleep 2,需要更快响应就改成sleep 0.5。

可选调整

如果你不需要每次检测时打印supervisorctl status的进程状态输出,可以把检测行改成静默模式,只保留重试逻辑:

#!/bin/bash
supervisorctl reload

echo "等待supervisor服务就绪..."
until supervisorctl status > /dev/null 2>&1; do
    echo "服务未就绪,1秒后重试"
    sleep 1
done
echo "supervisor状态正常"

如果你的环境中supervisorctl需要指定配置路径、访问权限或者socket地址,直接给命令加上对应参数即可,例如supervisorctl -c /your/path/supervisord.conf reload,检测部分的命令参数和你手动执行能正常返回的参数保持一致就行。

内容的提问来源于stack exchange,提问作者Barney Szabolcs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:18:49