00285 shell 命令错误重试


前言

shell 命令错误重试。

Operating System: Ubuntu 22.04.4 LTS

参考文档

介绍

以下是一个Python脚本,用于运行指定的Shell命令并在失败时自动重试:

import sys
import subprocess
import time

def run_command_with_retry(command, max_retries=None, retry_interval=5):
    retries = 0
    while True:
        # 执行命令并获取返回码
        print(f"\n尝试执行命令: {command}")
        process = subprocess.run(command, shell=True)
        
        if process.returncode == 0:
            print("命令执行成功!")
            return True
        else:
            retries += 1
            print(f"命令失败,返回码: {process.returncode}")
            
            # 检查是否达到最大重试次数
            if max_retries is not None and retries >= max_retries:
                print(f"已达到最大重试次数 {max_retries},停止重试。")
                return False
            
            # 计算下次重试等待时间
            print(f"{retry_interval}秒后重试 (已尝试次数: {retries})...")
            time.sleep(retry_interval)

if __name__ == "__main__":
    try:
        if len(sys.argv) < 2:
            print("使用方法: python retry.py <命令> [最大重试次数] [重试间隔秒数]")
            print("示例: python retry.py 'curl http://example.com' 5 10")
            sys.exit(1)

        command = sys.argv[1]
        max_retries = int(sys.argv[2]) if len(sys.argv) >= 3 else None
        retry_interval = int(sys.argv[3]) if len(sys.argv) >= 4 else 5

        success = run_command_with_retry(command, max_retries, retry_interval)
        sys.exit(0 if success else 1)
        
    except KeyboardInterrupt:
        print("\n操作被用户中断")
        sys.exit(1)

使用方法:

python retry.py "你的shell命令" [最大重试次数] [重试间隔秒数]

功能特点:

  1. 自动重试机制:当命令执行失败(返回非零状态码)时自动重试
  2. 灵活参数配置
    • 必需参数:要执行的Shell命令
    • 可选参数1:最大重试次数(默认无限重试)
    • 可选参数2:重试间隔时间(默认5秒)
  3. 用户友好提示
    • 显示每次尝试的执行结果
    • 显示剩余重试次数
    • 支持Ctrl+C中断
  4. 返回值规范
    • 成功时返回0
    • 失败时返回1
    • 被中断时返回1

使用示例:

  1. 无限重试(直到成功):
python retry.py "curl http://example.com"
  1. 最多重试5次,每次间隔10秒:
python retry.py "npm run build" 5 10
  1. 带复杂命令(使用引号包裹):
python retry.py "make build && make deploy" 3 30

注意事项:

  1. 使用shell=True执行命令,请确保命令来源可信
  2. 长时间运行的命令本身不会被中断,会等待其自然结束
  3. 重试次数统计不包含首次尝试
  4. 可以通过返回值判断最终执行结果:
    • 0表示最终成功
    • 1表示最终失败或被中断

这个脚本可以很好地处理需要重试的长时间运行命令,特别适合处理网络请求、编译过程、部署脚本等可能因临时问题失败的任务。

结语

第二百八十五篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录