Thursday, March 15, 2012

[ 更新 ] 定时重起OpenWrt路由器

有个路由器老是上不了网,每次要跑过去断电重起,很麻烦。
大侠已经刷把它刷成了OpenWrt Backfire 10.03。这就好办了。

先想用pc从lan登入上去,还不知道怎么设置?据说有安全问题。

看到路由器的admin页面上有schedule功能,就像让他定时重起。
现在设置好了,还不知道效果怎么样,明天再来看log。

我是第一次设置crontab,惭愧惭愧。这就整理一下:


1,配置工具
/usr/bin/crontab   # 是1个指向busybox的链接,又是busybox,真是好东西。
lrwxrwxrwx    1 root     root           17 Apr  6  2010 crontab -> ../../bin/busybox

2,配置文件
/etc/crontabs/root
30 5 * * * /sbin/reboot  # 每天5点30分重起。最好带上路径 
30 5 * * * root reboot   # 这里不需要写用户
否则报错:Mar 16 05:30:01 opr cron.err crond[1080]: USER root pid 2230 cmd root reboot

3,启动脚本
/etc/init.d/cron
-rwxr-xr-x    1 root     root          342 Apr  6  2010 cron

#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=50
start () {
        loglevel=$(/sbin/uci get "system.@system[0].cronloglevel" 2>/dev/null)
        [ -z "$(ls /etc/crontabs/)" ] && exit 1
        mkdir -p /var/spool/cron
        ln -s /etc/crontabs /var/spool/cron/ 2>/dev/null
        crond -c /etc/crontabs -l ${loglevel:-5}
}
stop() {
        killall -9 crond
}
cron # 显示帮助


4,开机运行

/etc/rc.d/S50cron  # 在rc.d下创建symbol link指向启动
lrwxrwxrwx    1 root     root           14 Mar 16 09:08 S50cron -> ../init.d/cron

root@opr:/etc/rc.d# ls
K50dropbear           S05netconfig          S59luci_dhcp_migrate
K90network            S10boot               S60dnsmasq
K95luci_fixtime       S40network            S95done
K98boot               S45firewall           S96led
K99umount             S50cron               S97watchdog
S02nvram              S50dropbear           S99sysctl
S05luci_fixtime       S50uhttpd


5,真正的服务程序在这里

/usr/sbin/crond  # 又是1个链接,指向busybox
lrwxrwxrwx    1 root     root           17 Apr  6  2010 crond -> ../../bin/busybox

参考资料:Scheduling Jobs With cron on OpenWrt



=================================================================================

计划任务列表的格式:
[minute] [hour] [day of month] [month] [day of week] [program to be run]
其中各个参数的取值范围是:
minute(0-59)
hour(0-23)
day of month(1-31)
month(1-12)
day of week(0-7,0 or 7 is Sun)
每个参数里的取值可以有4种间隔符:
* 表示任意
- 表示范围
, 表示枚举多个值
/ 表示每隔
例如:
周一到周五每天晚上23:30执行ruijieclient -k
30 23 * * 1-5 /bin/ruijieclient -k
每天每隔10分钟执行date
*/10 * * * * date

=================================================================================

要看一下路由器内核,就这个方法管用。

uname -a
Linux opr 2.6.32.10 #20 Tue Apr 6 15:53:48 CEST 2010 mips GNU/Linux
其他方法都不行,如getconf LONG_BIT, file /sbin/init
毕竟只是1个小设备。

参考资料:你的linux是64位的吗?
 


No comments:

Post a Comment