OpenWRT下TP-LINK路由器LED定时控制脚本优化与调试
1. OpenWRT下LED定时控制的基本原理家里路由器LED灯太亮影响睡眠这个问题我深有体会。去年给书房换了台TP-LINK路由器刷了OpenWRT系统后那个蓝色电源灯在夜里简直像个小探照灯。折腾了半天终于搞定了定时开关今天就把我的实战经验分享给大家。OpenWRT系统对LED的控制其实非常直观。所有LED设备都通过/sys/class/leds目录下的文件来管理。以我的TP-LINK 720N为例执行ls /sys/class/leds会看到两个设备ath9k-phy0无线网卡指示灯tp-link:blue:system电源指示灯关键文件是brightness它控制LED的开关状态# 查看当前LED状态 cat /sys/class/leds/tp-link\:blue\:system/brightness # 手动关闭LED echo 0 /sys/class/leds/tp-link\:blue\:system/brightness # 手动开启LED echo 1 /sys/class/leds/tp-link\:blue\:system/brightness这里有个新手容易踩的坑OpenWRT默认使用ash shell而非bash。如果你写的脚本第一行是#!/bin/bash运行时就会报not found错误。正确的做法是#!/bin/ash echo 0 /sys/class/leds/tp-link\:blue\:system/brightness2. 定时脚本的编写与调试有了基础控制命令接下来就是实现自动化。我最初尝试的crontab配置是这样的*/10 22-23,0-7 * * * /etc/off_system_led.sh 0 8 * * * /etc/on_system_led.sh这个配置的意思是晚上10点到次日早上7点每10分钟执行一次关灯脚本防止意外亮起每天早上8点准时开灯但实际使用中发现两个问题脚本有时不执行时间到了灯却没反应经过排查发现是系统时间不同步导致的。OpenWRT默认的时间同步配置有几个常见问题时区设置不正确默认可能是UTC时间NTP服务器不可达默认服务器在国外DNS解析失败影响NTP域名解析解决方法分三步在Web界面设置正确的时区Asia/Shanghai修改/etc/config/system配置文件config timeserver ntp option enabled 1 option enable_server 0 list server ntp.aliyun.com list server ntp1.aliyun.com重启时间服务/etc/init.d/sysntpd restart3. DNS配置的优化技巧在调试过程中我发现即使配置了NTP服务器时间同步仍然经常失败。通过ping测试发现是DNS解析的问题ping ntp.aliyun.com ping: bad address ntp.aliyun.comOpenWRT默认使用dnsmasq作为DNS转发器。直接修改/etc/resolv.conf会在服务重启后被覆盖。正确的做法是创建自定义DNS配置文件echo nameserver 223.5.5.5 /etc/resolv.dnsmasq.conf echo nameserver 223.6.6.6 /etc/resolv.dnsmasq.conf修改dnsmasq配置uci set dhcp.dnsmasq[0].resolvfile/etc/resolv.dnsmasq.conf uci commit dhcp重启DNS服务/etc/init.d/dnsmasq restart这个方案比直接修改resolv.conf更稳定因为不会被系统自动覆盖支持多DNS服务器配置修改后立即生效4. 定时任务的进阶优化经过一段时间的实际使用我发现最初的每分钟检查方案其实没必要。对于电源指示灯来说它不会像网络指示灯那样自动亮起。所以最终优化后的crontab配置更简洁0 22 * * * /etc/off_system_led.sh 0 8 * * * /etc/on_system_led.sh如果担心偶尔的时间偏差可以添加冗余检查# 晚上10点关灯之后每2小时检查一次 0 22 * * * /etc/off_system_led.sh 0 0,2,4,6 * * * /etc/off_system_led.sh # 早上8点开灯 0 8 * * * /etc/on_system_led.sh对于需要精确到分钟的控制可以使用这种格式# 晚上10:15关灯早上7:30开灯 15 22 * * * /etc/off_system_led.sh 30 7 * * * /etc/on_system_led.sh5. 常见问题排查指南在实际使用中可能会遇到这些问题问题1脚本权限不足/bin/ash: /etc/off_system_led.sh: Permission denied解决方法chmod x /etc/off_system_led.sh chmod x /etc/on_system_led.sh问题2LED设备名称不同不同型号的路由器LED设备名可能不同。查看所有可用LEDls /sys/class/leds问题3cron服务未运行检查cron服务状态/etc/init.d/cron status如果未运行启动服务/etc/init.d/cron start /etc/init.d/cron enable # 设置开机自启问题4日志查看查看cron执行日志logread | grep cron6. 其他实用技巧LED亮度调节 有些路由器支持亮度调节不仅仅是开关# 设置50%亮度 echo 128 /sys/class/leds/tp-link\:blue\:system/brightness多LED控制 如果需要控制多个LED可以编写组合脚本#!/bin/ash echo 0 /sys/class/leds/tp-link\:blue\:system/brightness echo 0 /sys/class/leds/ath9k-phy0/brightness状态指示灯模式 高级路由器支持LED模式设置常亮/闪烁/呼吸灯等# 查看可用模式 cat /sys/class/leds/tp-link\:blue\:system/trigger # 设置为心跳模式 echo heartbeat /sys/class/leds/tp-link\:blue\:system/triggerWeb界面快捷方式 在LuCI界面创建快捷控制按钮系统 - 自定义命令添加新命令设置名称和脚本路径保存后会在状态页显示快捷按钮经过三个月的实际使用这套方案非常稳定。关键是要确保时间同步和DNS解析的可靠性。如果遇到问题建议按这个顺序检查手动执行脚本测试LED控制是否正常检查系统时间和时区设置测试DNS解析是否正常查看cron服务状态和日志