bash - 重试 Unix shell 脚本中以下代码的逻辑
问题描述
我们有一个 unix 作业总是由于以下错误而失败
无法执行 os 命令
并在第二次或第三次重试后成功执行。
所以现在我想为下面的代码重试逻辑最多 3 次,请给出下面的代码示例。
如果在第一次运行时执行成功,那么它应该退出循环,否则它应该继续重试 3 次。然后它应该退出循环并处理剩余的代码。
sqlplus -s / <<EOF
set serveroutput on size 999999
set feed off
set term off
spool ../logs/$PROGRAM.log3
execute $PROGRAM;
EOF
解决方案
你可以做这样的事情
iteration=0
limit=3
seconds_in_wait=10
while [[ $iteration -le $limit ]];
do
sqlplus -s / <<EOF
whenever sqlerror exit 99;
set serveroutput on size 999999
set feed off
set term off
spool ../logs/$PROGRAM.log3
execute $PROGRAM;
EOF
if [[ $? -eq 99 ]];
then
if [[ $iteration -eq $limit ]];
then
echo "Maximum times allowed - Error"
exit 2;
else
iteration = $(expr $iteration + 1)
sleep $seconds_in_wait
fi
else
iteration=$(expr $limit + 1)
fi
done
- 您定义了迭代的限制,在我的示例 3 中
- 如果该过程失败,请等待几秒钟,然后重试
- 如果该过程失败并且您达到了限制,那么您将退出并出现错误
- 如果没有失败,则退出循环
推荐阅读
- api - katalon 测试用例参数化变量
- python - 如何在 Python 中使用带有 ctypes.Strcuture 类的插槽?
- angular - Angular 添加带有帮助文本的帮助文件
- reactjs - 使用 flex 将项目添加到 n 列网格中
- laravel - 未找到控制器内的自定义函数
- java - 将十进制实体和十六进制实体转换为 HTML 命名实体
- php - array_column() 最多需要 3 个参数,给定 13 个
- javascript - 如何应用时间尺度并以“n”年为间隔显示我的数据?
- java - 如何获取列表对象的索引
- regex - 在我只返回完全匹配的地方使用 FILTER?