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

Orange Pi网络中断检测bash脚本优化:缩短netcat超时时间

解决Orange Pi网络看门狗脚本中超时过长的问题

嘿,我完全懂你的困扰——30秒的超时延迟对于WiFi收音机来说实在太影响体验了,断网后得等半分钟才能检测到,这显然不符合实时性需求。咱们来一步步优化这个脚本:

1. 给netcat添加超时参数

你的netcat命令默认没有设置超时时间,所以才会等30秒。不同版本的nc(netcat)参数略有差异,你可以根据你的Orange Pi上的版本选择:

GNU netcat(大部分Linux发行版默认)

用-w参数设置超时时间(单位:秒),比如设置2秒超时:

if nc -w 2 google.com 80 > /dev/null 2>&1; then
    # 网络正常逻辑
    sig_state=1
else
    # 断网逻辑
    sig_state=0
fi

BSD netcat(部分嵌入式系统可能用这个)

用-t参数设置超时,比如同样2秒:

if nc -t 2 google.com 80 > /dev/null 2>&1; then
    sig_state=1
else
    sig_state=0
fi

2. 更快的替代方案:用ping检测

相比建立TCP连接的netcat,ping只需要ICMP包,检测速度更快。你可以设置只发1个包,超时1秒,这样几乎能瞬间判断网络状态:

if ping -c 1 -W 1 8.8.8.8 > /dev/null 2>&1; then
    # 网络正常:点亮LED、维持连接
    sig_state=1
    # 这里可以加LED点亮命令,比如echo 1 > /sys/class/leds/orangepi:red/brightness
else
    # 断网:闪烁LED、尝试重连WiFi
    sig_state=0
    # LED闪烁示例:echo 0 > /sys/class/leds/orangepi:red/brightness; sleep 0.5; echo 1 > ...
    # 重连WiFi命令,比如nmcli connection up "你的WiFi名称" 或者 ifdown wlan0 && ifup wlan0
fi

注意:有些网络可能禁用ICMP(ping),这时还是得用netcat,但这种情况很少见,对于家用路由器来说完全没问题。

3. 优化完整脚本示例

结合你的需求,这里给一个完整的优化版脚本,包含状态检测、LED反馈和重连逻辑:

#!/bin/bash

# 配置参数
WIFI_INTERFACE="wlan0"
LED_PATH="/sys/class/leds/orangepi:red/brightness"
CHECK_INTERVAL=5  # 每5秒检测一次
TIMEOUT=2         # 检测超时时间

sig_state=1  # 初始假设网络正常
echo "Network Watchdog ON"
echo "..."

# 初始化LED状态
echo 1 > $LED_PATH

while true; do
    # 用netcat检测网络(如果ping不行就用这个)
    if nc -w $TIMEOUT google.com 80 > /dev/null 2>&1; then
        if [ $sig_state -eq 0 ]; then
            # 网络从断连恢复
            echo "Network restored!"
            echo 1 > $LED_PATH  # 点亮LED
            sig_state=1
        fi
    else
        if [ $sig_state -eq 1 ]; then
            # 网络从正常变为断连
            echo "Network lost! Attempting to reconnect..."
            sig_state=0
            # 尝试重连WiFi
            ifdown $WIFI_INTERFACE
            sleep 2
            ifup $WIFI_INTERFACE
        fi
        # 断网时LED闪烁
        echo 0 > $LED_PATH
        sleep 0.5
        echo 1 > $LED_PATH
        sleep 0.5
    fi
    sleep $CHECK_INTERVAL
done

这个脚本做了这些优化:

  • 缩短了检测超时时间
  • 只在状态变化时执行重连和日志输出,避免重复操作
  • 断网时LED闪烁提醒,恢复后常亮
  • 可配置的参数,方便根据你的硬件调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:00:50