重试 Unix shell 脚本中以下代码的逻辑
Posted
技术标签:
【中文标题】重试 Unix shell 脚本中以下代码的逻辑【英文标题】:Retry logic for below piece of code in Unix shell script 【发布时间】:2020-12-16 06:56:30 【问题描述】:我们有一个 unix 作业总是由于以下错误而失败
无法执行操作系统命令
在第二次或第三次重试后,它成功执行。
所以现在我想为下面的代码重试逻辑最多 3 次,请举例说明下面的代码。
如果第一次运行成功,那么它应该退出循环,否则它应该继续重试直到 3 次。然后它应该退出循环并处理剩余的代码。
sqlplus -s / <<EOF
set serveroutput on size 999999
set feed off
set term off
spool ../logs/$PROGRAM.log3
execute $PROGRAM;
EOF
【问题讨论】:
bash loops introduction***.com/questions/5274294/…***.com/questions/21982187/…***.com/questions/12967232/…***.com/questions/30197818/…你做了什么研究?你到底卡在哪里了? 【参考方案1】:你可以这样做
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 中
如果该过程失败,请等待几秒钟,然后重试
如果进程失败并且您达到了限制,那么您将退出并出现错误
如果没有失败,则退出循环
【讨论】:
非常感谢 Roberto 的快速帮助,我是 Unix 的初学者,我会将这段代码放在我的脚本中,并在这里告诉你 @vijay,谢谢。我更新了答案以对逻辑表达式( -eq , -lt , -le ... )使用相同的语法以上是关于重试 Unix shell 脚本中以下代码的逻辑的主要内容,如果未能解决你的问题,请参考以下文章
UNIX shell 脚本中的“#!/bin/sh”行是啥意思?