这是一个用于监测网站可用性并重新启动服务器的脚本。以下是一些需要注意的地方:

  1. 脚本默认使用 'tcping' 命令测试网站是否可用,但是脚本中使用的却是 'hping3' 命令。如果系统中没有安装 'hping3',那么脚本就无法正常运行。需要将脚本中的 'hping3' 命令替换为 'tcping' 命令才能保证脚本的可用性。

  2. 脚本中的重试次数和连续失败次数都需要根据实际情况进行调整。如果重试次数太多,会浪费服务器资源,如果连续失败次数太少,可能会误判正常的网络波动。

  3. 如果需要真正重启服务器,需要将脚本中的 'reboot' 命令取消注释。否则脚本只会输出日志,但不会真正重启服务器。

  4. 脚本中的 'sleep 5' 命令表示每隔 5 秒钟检测一次网站可用性。如果需要更频繁或者更稀少地检测,可以通过修改该命令的参数实现。

#!/bin/bash

# 定义需要检查的网站
websites=('www.google.com' 'www.facebook.com' 'www.twitter.com')

# 定义重试次数
max_retry=5

# 定义连续失败次数达到多少次后重新启动服务器
max_failures=3

# 定义日志文件
log_file="/var/log/tcping.log"

# 定义函数,用于使用 tcping 测试网站是否可用
function test_website() {
    echo "$(date) - 正在测试网站: $1"
    for ((i=1; i<=$max_retry; i++)); do
        tcping_result=$(tcping -S $1 -c 1 -p 443 > /dev/null 2>&1)
        if [ $? -eq 0 ]; then
            echo "$(date) - 网站 $1 可用"
            return 0
        else
            echo "$(date) - 网站 $1 不可用 - 第 $i 次重试"
        fi
    done
    return 1
}

# 定义函数,用于重新启动服务器
function reboot_server() {
    echo "$(date) - 所有网站都不可用 - 正在重新启动服务器"
    # 如果需要真正重启服务器,请取消下面一行的注释
    # reboot
}

# 主循环
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
                    break
                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
网站可用性监测脚本:使用 tcping 检测并重启服务器

原文地址: https://www.cveoy.top/t/topic/mOrQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录