捕获特定错误并重试脚本?- 砰

  • 本文关键字:脚本 重试 错误 bash
  • 更新时间 :
  • 英文 :


我有一个bash脚本,它运行一个程序来迁移一些数据。这在大约 30-40% 的时间内失败。

我想要一种在出现此特定错误时重试脚本的方法,但我只想在失败之前尝试 3 次。

脚本失败时输出以下内容:

Error: The connection to the remote server has timed out, no changes      have been committed. (#134 - scope: ajax_verify_connection_to_remote_site)

编辑:更具体地说。

migration.sh:
#!/bin/bash
various other scripts........
sudo a_broken_migration_program <Variables>

我想重试几次broken_migration,理想情况下,只有当它因这个特定错误而失败时,但如果这太复杂,我将决定重试所有错误。

为此,只需循环运行您的命令:

#Loop until counter is 3
counter=1
while [[ $counter -le 3 ]] ; do
        yourcommand && break
        ((counter++))
done

如果yourcommand成功,那么它将打破循环。如果不成功,它将增加计数器和循环。直到计数器是3。

如果只想重试特定的错误代码,则可以在失败时捕获错误,测试代码并递增:

#Loop until counter is 3
counter=1
while [[ $counter -le 3 ]]
do
        #command to run
        ssh person@compthatdoesntexist 
        rc=$?
        [[ $rc -eq 255 ]] && ((counter++)) || break
done

此示例尝试 ssh 到不存在的框。然后,我们在变量 $rc 中捕获返回代码$?。如果$rc 255("ssh:无法解析主机名组合不存在:名称或服务未知"),则它会递增计数器并循环。任何其他退出代码都会将我们踢出循环。

相关内容

  • 没有找到相关文章

最新更新