#!/bin/bash # 目标主机 TARGET="google.com" # 允许的最大失败次数 MAX_FAILURES=20 # 计数器初始化 failure_count=0 echo "--- Ping Test Script Started ---" echo "Target: $TARGET" echo "Max allowed failures: $MAX_FAILURES" # 循环进行ping操作 while true; do echo "--- $(date) --- Attempt $((failure_count + 1)): Pinging $TARGET..." # 执行ping命令: # -c 1: 只发送一个ICMP请求 # -W 2: 等待响应的时间为2秒 (timeout) # > /dev/null 2>&1: 隐藏标准输出和标准错误,我们只关心退出状态码 ping -c 1 -W 2 "$TARGET" > /dev/null 2>&1 # 检查上一个命令的退出状态码 ($?) if [ $? -eq 0 ]; then # Ping 成功 echo "Ping successful. Resetting counter." failure_count=0 else # Ping 失败 echo "Ping failed." failure_count=$((failure_count + 1)) echo "Current failure count: $failure_count" fi # 检查是否达到最大失败次数 if [ "$failure_count" -ge "$MAX_FAILURES" ]; then echo "!!! CRITICAL !!!" echo "Maximum failure threshold ($MAX_FAILURES) reached for $TARGET." echo "Initiating system reboot..." # 执行重启命令 (使用 shutdown -r now 更安全,因为它会先通知系统) # 如果需要立即重启,可以使用 'reboot' 或 'shutdown -r now' /sbin/shutdown -r now # 脚本在这里应该停止执行,因为系统正在重启 exit 0 fi # 等待一段时间再进行下一次测试 (例如,每10秒测试一次) sleep 10 done