标签 OpenWrt 下的文章

Update:

  • 2021-01-28: 换了联通宽带,不需要路由器拨号了,定时任务暂停了。

家里的路由器经常在一觉醒来的时候断网,随即小爱音响及其绑定的智能家具全都停止工作。每天早上八点的时候小爱同学会定时帮我加热热水器,而断网后只能去洗冷水。一次两次拔下路由器能解决,但最近越来越冷,洗冷水也觉得越发刺骨,我也实在没有动力从温暖的被窝里起来拔插路由器。

$ vim /etc/network-watch-dog
#!/bin/sh

# 锁文件位置
LOCK_FILE_PATH=/tmp/.network-watch-dog.lock
# 每次发包次数
PING_COUNT=3
# 离上次断网最大等待时间
MAX_WAITING_SECONDS=600

# 这里直接固定 ping ali dns
SUCCESS_COUNT=$(ping 223.5.5.5 -c ${PING_COUNT} 2>&1 | grep '64 bytes' | wc -l)

if [ ${SUCCESS_COUNT} == 0 ]; then
  TIMESTAMP=$(date +%s)

  if [ -f ${LOCK_FILE_PATH} ]; then
    LOCK_TIMESTAMP=$(cat ${LOCK_FILE_PATH})
    # 超过最大等待时间 删除锁文件重启
    if [ $(expr ${TIMESTAMP} - ${LOCK_TIMESTAMP}) -ge ${MAX_WAITING_SECONDS} ]; then
      rm -rf ${LOCK_FILE_PATH}
      reboot
    fi
  else
    # 写入断网时间到锁文件
    echo ${TIMESTAMP} > ${LOCK_FILE_PATH}
  fi
  /etc/init.d/network restart
else
  # 成功联网后判断上次断网遗留的锁文件
  if [ -f ${LOCK_FILE_PATH} ]; then
    rm -rf ${LOCK_FILE_PATH}
  fi
fi

最后给个执行权限,在定时任务中加入这条脚本,我这里每三分钟执行一次。

$ chmod a+x /etc/network-watch-dog
$ crontab -e
*/3 * * * * /etc/network-watch-dog > /dev/null 2>&1

等两天打算搞个断网消息通知。

前段时间,上了趟车在闲鱼 ¥90 收了一款 Newwifi3 路由器。到手后立马刷入了 OpenWRT 的衍生系统——PandoraBox,并配置了源以便于开启科学上网。[脸红]

Newwifi3

相比斐讯 K2P 配置相同,只是 5G 信号强度比较弱,不过我一个人住小单间,完全没问题。然而到了第一天晚上就发现一个问题:路由器的四侧有一条缝用于散热,但是我躺床上,那条缝就直接对着我,而缝里边有五颗 LED 灯。[尴尬]

侧边用于散热的缝

你想想,正困的时候,五条灯光直射你的眼睛,你还睡不睡。你说刺眼吧,又不能关,关了我这出租屋里 4G 信号贼差。气不气?[鼓掌]

闪瞎狗眼

无解,便开始寻找解决方案,能不能关掉着破灯:白天亮起,晚上熄灭。

找到了脚本,LED 由 /sys/class/leds 目录下的配置文件控制,写入不同的值来控制 LED 灯的点亮和熄灭,0 值为关闭,3 为开启,写入立即生效。

新建一个脚本用于控制 LED 熄灭,我将他存放在 /etc/off_leds.sh

$ vim /etc/off_leds.sh
#!/bin/bash
for i in `ls /sys/class/leds`
do
  cd /sys/class/leds
  cd $i
  echo 0 > brightness
done

给它个执行权限,然后执行:

$ chmod a+x /etc/off_leds.sh
$ /etc/off_leds.sh

再将它加入定时任务,LED 灯开启可以通过初始化 LED 的脚本实现:

$ crontab -e
# 关闭 LED 灯
0 22 * * * /etc/off_leds.sh
# 开启 LED 灯
0 7 * * * /etc/init.d/led start

到点熄灭了,完美。。。个屁,然而后半夜,它自己又亮了!!![内伤]

不知道为啥会自我唤醒 LED 灯,猜想是断网自动连接或者其他原因,但是我不管,我只想要睡觉![哭泣]

修改定时任务:

$ crontab -e
# 关闭 LED 灯
* 22-6 * * * /etc/off_leds.sh
# 开启 LED 灯
0 7 * * * /etc/init.d/led start

破灯,我还治不了你了。

另外,定时任务有时候写入后会不执行,猜想是 crontab 进程挂掉了,只需要重启下路由器或者直接粗暴的拔插电源就行。