我正在创建一个shell脚本,该脚本检查在另一台计算机上运行的服务的状态,如果没有得到任何响应,则只能在本地系统上执行某些操作。我正在脚本中使用if子句来完成此任务。
有时由于网络连接,它错误地假定远程服务器没有响应,并执行if子句中提到的任务。我想设置一个重试,以便在第一次尝试未找到任何响应时检查条件是否不止一次。
是否有任何方法可以为此目的在shell脚本中设置类似的重试?
下面是示例代码
RSI1_STATUS=$(psql -U username -h serverip -d postgres -t -c "select version();" )
if [ -z "$RSI1_STATUS" ] #Condition will be true if remote server is not active
then
touch /tmp/postgresql.trigger
fi
现在,我想在第一次尝试中是否多次检查该条件。
答案 0 :(得分:2)
您可以使用while
循环添加具有多个重试次数的重试循环:
retries=5
while ! check_network_connection && ((--retries)); do
sleep 1 # or probe the network, etc.
done
if [[ $retries -eq 0 ]]; then
echo "Error: Connection retries exhausted."
else
# connection succeeded.
fi
您要睡觉还是做其他事情取决于您的使用情况和应用程序。
注意:在循环中检查后,“网络连接”可能已经成功。因此,如果retries
为0,则不一定表示连接仍然断开。