帮我看一下以下代码 当我三个网站全无法访问 开始第一次重试时 只重试了第一个网站后 输出第 6 次重试失败 我要的是重试5次那三个网站#!binbash# 定义需要检查的网站websites=wwwgooglecom wwwfacebookcom wwwtwittercom# 定义重试次数max_retry=5# 定义连续失败次数达到多少次后重新启动服务器max_failures=3# 定义日志文
在第一次重试时,只测试了第一个网站,是因为在第一个网站测试失败后,代码就会进入到第一个 for 循环的下一次迭代,继续测试下一个网站。这个问题可以通过将第一个 for 循环改为 while 循环来解决,如下所示:
while true; do failure_count=0 for website in "${websites[@]}"; do if test_website "$website"; then failure_count=0 else ((failure_count++)) if [ $failure_count -ge $max_failures ]; then echo "$(date) - $website 连续 $failure_count 次不可用" break fi fi done if [ $failure_count -ge $max_failures ]; then failure_count=0 for ((i=1; i<=$max_retry; i++)); do echo "$(date) - 正在尝试重新测试所有网站 - 第 $i 次" all_websites_up=true for website in "${websites[@]}"; do if ! test_website "$website"; then all_websites_up=false fi done if $all_websites_up; then echo "$(date) - 重试第 $i 次后,所有网站都可用" break fi echo "$(date) - 第 $i 次重试失败" done if ! $all_websites_up; then reboot_server >> $log_file 2>&1 exit 0 fi fi sleep 5 done
这样就能够在出现连续失败时,重试所有网站,而不是只重试第一个网站。
原文地址: https://www.cveoy.top/t/topic/bl5d 著作权归作者所有。请勿转载和采集!