一、打开或新建脚本

创建命令: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 文件
nano /etc/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 有执行权限
chmod +x /etc/rc.local
步骤4:手动测试