网站可用性监测脚本:使用 tcping 检测并重启服务器
这是一个用于监测网站可用性并重新启动服务器的脚本。以下是一些需要注意的地方:
-
脚本默认使用 'tcping' 命令测试网站是否可用,但是脚本中使用的却是 'hping3' 命令。如果系统中没有安装 'hping3',那么脚本就无法正常运行。需要将脚本中的 'hping3' 命令替换为 'tcping' 命令才能保证脚本的可用性。
-
脚本中的重试次数和连续失败次数都需要根据实际情况进行调整。如果重试次数太多,会浪费服务器资源,如果连续失败次数太少,可能会误判正常的网络波动。
-
如果需要真正重启服务器,需要将脚本中的 'reboot' 命令取消注释。否则脚本只会输出日志,但不会真正重启服务器。
-
脚本中的 '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
原文地址: https://www.cveoy.top/t/topic/mOrQ 著作权归作者所有。请勿转载和采集!