前言
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命令" [最大重试次数] [重试间隔秒数]
功能特点:
- 自动重试机制:当命令执行失败(返回非零状态码)时自动重试
- 灵活参数配置:
- 必需参数:要执行的Shell命令
- 可选参数1:最大重试次数(默认无限重试)
- 可选参数2:重试间隔时间(默认5秒)
- 用户友好提示:
- 显示每次尝试的执行结果
- 显示剩余重试次数
- 支持Ctrl+C中断
- 返回值规范:
- 成功时返回0
- 失败时返回1
- 被中断时返回1
使用示例:
- 无限重试(直到成功):
python retry.py "curl http://example.com"
- 最多重试5次,每次间隔10秒:
python retry.py "npm run build" 5 10
- 带复杂命令(使用引号包裹):
python retry.py "make build && make deploy" 3 30
注意事项:
- 使用
shell=True
执行命令,请确保命令来源可信 - 长时间运行的命令本身不会被中断,会等待其自然结束
- 重试次数统计不包含首次尝试
- 可以通过返回值判断最终执行结果:
- 0表示最终成功
- 1表示最终失败或被中断
这个脚本可以很好地处理需要重试的长时间运行命令,特别适合处理网络请求、编译过程、部署脚本等可能因临时问题失败的任务。
结语
第二百八十五篇博文写完,开心!!!!
今天,也是充满希望的一天。