一、打开或新建脚本 创建命令:nano /etc/hotplug.d/iface/99-led-network.sh
脚本代码: #!/bin/sh # /etc/hotplug.d/iface/99-led-network.sh # 功能:兼容wan接口热插拔触发 + 定时执行,控制LED指示灯 # 定时规则:18:00-06:00 关闭所有LED;其他时段根据网络状态显示 # ===================== 可配置项(根据实际情况调整) ===================== TIMER_START=18 # 定时开始小时(18点) TIMER_END=6 # 定时结束小时(6点) TARGET_INTERFACE="wan" # 仅处理wan接口的热插拔事件 LED_WHITE="/sys/class/leds/white:status/brightness" # 白灯设备路径 LED_RED="/sys/class/leds/red:power/brightness" # 红灯设备路径 LOG_FILE="/tmp/led_control.log" # 日志文件路径 # ======================================================================== # 日志函数:记录时间和执行信息,方便调试 log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" } # 获取当前小时(去除前导0,如08→8) get_current_hour() { date +%H | sed 's/^0//' } # 判断是否在定时时段内(18点到次日6点) is_timer_period() { local current_hour=$(get_current_hour) [ "$current_hour" -ge "$TIMER_START" ] || [ "$current_hour" -lt "$TIMER_END" ] } # 设置LED亮度(带错误处理) set_led() { local white_bright=$1 local red_bright=$2 # 写入白灯(检查文件可写性) if [ -w "$LED_WHITE" ]; then echo "$white_bright" > "$LED_WHITE" || log "ERROR: 写入白灯失败" else log "ERROR: 白灯设备文件不可写 - $LED_WHITE" fi # 写入红灯(检查文件可写性) if [ -w "$LED_RED" ]; then echo "$red_bright" > "$LED_RED" || log "ERROR: 写入红灯失败" else log "ERROR: 红灯设备文件不可写 - $LED_RED" fi log "LED状态更新:白灯=$white_bright 红灯=$red_bright" } # ===================== 主执行逻辑 ===================== log "脚本启动 | 触发类型:$( [ -n "$INTERFACE" ] && echo "Hotplug" || echo "定时执行" )" # 场景1:Hotplug触发(有INTERFACE环境变量) if [ -n "$INTERFACE" ]; then # 仅处理目标接口(wan),非wan接口直接退出 if [ "$INTERFACE" != "$TARGET_INTERFACE" ]; then log "跳过非目标接口:$INTERFACE" exit 0 fi # 处理ifdown事件(接口断开) if [ "$ACTION" = "ifdown" ]; then set_led 0 255 # 关白灯,开红灯 # 处理ifup事件(接口连接) elif [ "$ACTION" = "ifup" ]; then if is_timer_period; then set_led 0 0 # 定时时段:全关LED else set_led 255 0 # 非定时时段:开白灯,关红灯 fi fi # 场景2:定时执行(无INTERFACE环境变量) else if is_timer_period; then set_led 0 0 # 定时时段:全关LED else # 非定时时段:先检测网络连通性,再设置LED if ping -c 1 -W 1 223.5.5.5 >/dev/null 2>&1; then set_led 255 0 # 网络通:开白灯 else set_led 0 255 # 网络不通:开红灯 fi fi fi log "脚本执行完成" exit 0
二、脚本部署与使用步骤 1.保存并赋予执行权限 保存:Ctrl+O 回车 Ctrl+X退出
# 赋予执行权限(关键) chmod +x /etc/hotplug.d/iface/99-led-network.sh
2.配置 crontab 定时执行 # 编辑crontab crontab -e # 在文件末尾添加以下行(指定完整路径,避免环境变量问题) */1 * * * * /bin/sh /etc/hotplug.d/iface/99-led-network.sh # 重启cron服务使配置生效 /etc/init.d/cron restart # 查看日志(验证执行结果) cat /tmp/led_control.log
三、通过 /etc/rc.local 实现开机自启 步骤1:编辑 rc.local 文件
步骤 2:添加执行命令(关键) 在文件中 exit 0 之前 添加以下行(确保命令在 exit 前,否则不会执行):
# 开机执行LED控制脚本(后台执行,不阻塞开机) /bin/sh /etc/hotplug.d/iface/99-led-network.sh &
编辑后的rc.local示例(完整内容):
#!/bin/sh /etc/rc.common # Copyright (C) 2007-2016 OpenWrt.org START=99 boot() { # 其他原有内容(如果有)保留 # 添加LED脚本执行命令 /bin/sh /etc/hotplug.d/iface/99-led-network.sh & exit 0 }
步骤 3:确保 rc.local 有执行权限
步骤4:手动测试