SuperAPI AI 工具集

retry-utils

部署与运维

查看项目

更新于 10-16 06:10

技能介绍

Retry Utils 是一个以命令行方式运行的重试工具,主要用于在命令失败时自动进行重试。它通过智能重试逻辑帮助用户应对临时性故障,例如网络波动或服务暂时不可用。

用途

该工具适用于需要在命令执行失败时进行自动重试的场景,典型用例包括:让某条命令重试直到成功、使用指数退避执行命令、在超时前持续尝试、仅在特定错误出现时重试,以及在重试时配合退避策略运行。反之,若任务只是简单的一次性命令,应直接运行;若需要持久化运行命令,应使用 systemd 或 PM2;若涉及实时处理,则应使用消息队列。

主要能力

Retry Utils 提供多种重试策略。基础重试通过 --command 指定命令,并可用 --max-retries 控制最大重试次数。退避策略支持 none、linear 和 exponential 三种类型:linear 每次使用相同延迟,exponential 每次将延迟翻倍,公式为 delay = base_delay * 2^attempt。延迟可通过 --base-delay 设置初始值,通过 --max-delay 设置上限。用户也可以使用 --delays 指定完全自定义的延迟序列。

抖动(jitter)功能用于为延迟增加随机性,支持 none、full、equal 和 decorrelated 四种类型:full 在 0 到计算出的延迟之间随机取值;equal 在 delay/2 到 delay 之间随机取值;decorrelated 则采用 AWS 风格的去相关抖动。--jitter-percent 可设置抖动百分比(0-100),默认 20。

错误匹配能力允许用户精确控制重试条件。--error-pattern 使用正则表达式限定仅在错误匹配时重试;--exit-codes 可指定需要重试的退出码,默认对所有非零退出码重试。条件控制方面,--until-pattern 使命令持续运行直到输出匹配指定模式,--timeout 设置最大总时长,--stop-on 则在输出匹配模式时停止。

使用方式

该工具通过命令行调用,格式为 {baseDir}/retry.sh,并搭配相应选项。基础示例如:retry.sh --command "curl http://api.example.com/data",或使用 --max-retries 5 指定五次重试。指数退避示例:retry.sh --command "npm install" --backoff exponential --base-delay 2 --max-delay 60。线性退避示例:retry.sh --command "npm install" --backoff linear --base-delay 5。自定义退避示例:retry.sh --command "npm install" --delays "1,2,5,10,30"。抖动示例:retry.sh --command "npm install" --jitter full,或 --jitter equal --jitter-percent 20,或 --jitter decorrelated。错误匹配示例:retry.sh --command "curl api.example.com" --error-pattern "Connection refused",或 --error-pattern "ETIMEDOUT|ENOTFOUND",或 --exit-codes "1,7,28"。条件示例:retry.sh --command "curl -s http://api/health" --until-pattern "ok";retry.sh --command "curl http://api/data" --timeout 300;retry.sh --command "tail -f /var/log/app.log" --stop-on "error" --max-retries 100。

输出与退出码

命令成功时,工具输出命令结果并以退出码 0 结束。所有重试均失败后,工具会输出失败信息,包含尝试次数、命令、最后退出码与最后 stderr。退出码含义为:0 表示命令成功,1 表示所有重试已耗尽。用户可使用 --no-exit-on-failure 避免在最终失败时退出,使用 --quiet 在重试时抑制输出,使用 --verbose 显示重试尝试。

适用场景

该工具适合处理临时性故障恢复,例如网络请求重试(配合 --error-pattern 匹配连接错误)、包管理器安装重试(如 npm install 遇到 ETIMEDOUT 或 ENOTFOUND 时)、服务就绪轮询(使用 --until-pattern 等待健康检查返回 healthy 或 ok),以及需要自定义延迟序列的自动化任务。

限制

该工具不适用于以下情况:简单的一次性命令应直接运行;需要持久化运行命令的场景应使用 systemd 或 PM2;实时处理应使用消息队列。此外,超时设置涵盖所有重试尝试的总时长。工具会同时捕获 stdout 和 stderr,保留成功时的命令退出码,并传递环境变量,也支持带管道的 shell 命令。

选项概览

--command CMD 为必填项,指定要运行的命令。--max-retries N 默认 3。--backoff TYPE 可选 none、linear、exponential,默认 none。--base-delay SECS 默认 1。--max-delay SECS 默认 60。--jitter TYPE 可选 none、full、equal、decorrelated,默认 none。--jitter-percent N 默认 20。--delays "N,N,..." 为自定义延迟序列。--error-pattern REGEX 默认匹配所有。--exit-codes "N,..." 默认所有非零退出码。--until-pattern REGEX 用于持续运行直到输出匹配。--stop-on REGEX 用于输出匹配时停止。--timeout SECS 为最大总时长。--no-exit-on-failure 在最终失败时不退出。--quiet 抑制重试输出。--verbose 显示重试尝试。