You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现ping检测网络失败后自动通过telnet重启调制解调器的bash脚本

实现方案

核心思路

在现有expect逻辑外层套一层Bash检测逻辑,先对公网稳定地址执行ping连通性测试,所有ping包都丢失的情况下再执行调制解调器重启逻辑。

方案1:单文件整合版(推荐,只需维护一个脚本)

把expect逻辑直接嵌入Bash脚本中,创建名为modem_check_reboot.sh的文件,内容如下:

#!/bin/bash
# 配置项,请根据实际情况修改
PING_TARGET="114.114.114.114"  # 公网ping目标,可选223.5.5.5等稳定公网地址
PING_COUNT=3                    # ping测试次数
MODEM_IP="192.168.1.1"          # 调制解调器管理地址
TELNET_USER="xxxxx"             # telnet登录用户名
TELNET_PASS="xxxxx"             # telnet登录密码

# 执行ping检测,丢弃输出仅判断返回值
ping -c $PING_COUNT -W 1 $PING_TARGET > /dev/null 2>&1

# ping返回值非0表示检测失败,执行重启逻辑
if [ $? -ne 0 ]; then
    # 内嵌expect执行telnet重启操作
    expect << EOF
set timeout 60
spawn /usr/bin/telnet $MODEM_IP
expect "Username:" {send "$TELNET_USER\r"}
expect "Password:" {send "$TELNET_PASS\r"}
expect "*" {send "reboot\r"}
interact
EOF
fi

执行前先给脚本加执行权限:
chmod +x modem_check_reboot.sh

方案2:双文件拆分版

如果你想把检测逻辑和重启逻辑分开维护,可以拆成两个文件:

  1. 先把你现有的重启逻辑保存为modem_reboot.exp,内容如下:
set timeout 60
set user xxxxx
set password xxxxx
spawn /usr/bin/telnet 192.168.1.1
expect "Username:" {send "$user\r"}
expect "Password:" {send "$password\r"}
expect "*" {send "reboot\r"}
interact

给文件加执行权限:chmod +x modem_reboot.exp

  1. 再创建Bash检测脚本modem_check.sh,内容如下:
#!/bin/bash
PING_TARGET="114.114.114.114"
PING_COUNT=3

ping -c $PING_COUNT -W 1 $PING_TARGET > /dev/null 2>&1
if [ $? -ne 0 ]; then
    # 调用独立的expect重启脚本
    ./modem_reboot.exp
fi

同样给检测脚本加执行权限:chmod +x modem_check.sh

注意事项

  • 执行脚本前请先确保expect已安装,Debian/Ubuntu系统执行apt install expect,CentOS/RHEL系统执行yum install expect
  • 可以把检测脚本加入crontab定时任务,例如设置每5分钟执行一次,实现自动断网恢复
  • 为避免网络波动导致误重启,可以调高ping检测次数,或者设置连续两次检测失败再触发重启逻辑

内容的提问来源于stack exchange,提问作者Fanava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:45:04