以下代码现在是三个网站都无法访问是时 一直在重试三个网站 我希望是重试5次就结束 并且输出这是重试的第几次#!binbash# 定义需要检查的网站websites=wwwbdsdthsehzaidupw garegnpw wwwsysuecn# 定义重试次数 max_retry=5# 定义连续失败次数达到多少次后重新启动服务器max_failures=5# 定义检查间隔时间单位是秒interval
修改后的代码如下:
#!/bin/bash
定义需要检查的网站
websites=("wwwbdsdthsehzaidu.pw" "garegn.pw" "www.sysu.ecn")
定义重试次数
max_retry=5
定义连续失败次数达到多少次后重新启动服务器
max_failures=5
定义检查间隔时间,单位是秒
interval=1
restart_command="systemctl reboot"
定义日志文件
log_ok_file="/var/log/gfw-status-ok.log" log_error_file="/var/log/gfw-status-error.log"
整个函数用于tcping测试网站是否可用
function test_website { echo -e "\033[36m[$(date "+%Y-%m-%d %H:%M:%S")] - 正在测试网站: $1\033[0m" for ((i=1; i<=$max_retry; i++)); do hping3_result=$(hping3 -S $1 -c 1 -p 443 > /dev/null 2>&1) if [ $? -eq 0 ]; then echo -e "\033[32m[$(date "+%Y-%m-%d %H:%M:%S")] - 网站 $1 可用\033[0m" echo "[$(date "+%Y-%m-%d %H:%M:%S")] - 网站 $1 可用" >> $log_ok_file return 0 else echo -e "\033[31m[$(date "+%Y-%m-%d %H:%M:%S")] - 网站 $1 不可用 - 第 $i 次重试\033[0m" echo "[$(date "+%Y-%m-%d %H:%M:%S")] - 网站 $1 不可用 - 第 $i 次重试" >> $log_error_file fi sleep $interval done return 1 }
定义函数,用于重新启动服务器
function reboot_server { echo -e "〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓" echo -e "[$(date "+%Y-%m-%d %H:%M:%S")] - 所有网站都不可用 - 正在重新启动服务器" echo -e "〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓" # $restart_command }
主循环
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 -e "\033[31m[$(date "+%Y-%m-%d %H:%M:%S")] - $website 连续 $failure_count 次不可用\033[0m" # 添加重试逻辑 for ((j=1; j<=$max_retry; j++)); do echo -e "\033[36m[$(date "+%Y-%m-%d %H:%M:%S")] - 正在重试 $website - 第 $j 次\033[0m" if test_website "$website"; then failure_count=0 break else ((failure_count++)) fi sleep $interval done if [ $failure_count -ge $max_failures ]; then break 2 # 退出两层循环 fi fi fi done if [ $failure_count -ge $max_failures ]; then echo -e "\033[33m[$(date "+%Y-%m-%d %H:%M:%S")] - 持续测试 3 个网站均无法访问\033[0m" reboot_server >> $log_error_file 2>&1 exit 0 fi sleep $interval done
原文地址: https://www.cveoy.top/t/topic/boJx 著作权归作者所有。请勿转载和采集!