方永、南天紫云

道亦有道

OpenWrt中crontab -e的使用
作者 vinoca 發布於 2012年08月26日

OpenWrt中使用crontab -e 添加计划任务在Openwrt重启之后添加的项会被删除。

这个很让人纠结。于是grep找到了busybox包中的/etc/init.d/cron脚本,在通用start函数中赫然有一行“rm -rf /etc/crontabs/root”,之后下面两行正是加载/etc/config/cron中的配置,将这三行删除保存,重启之后/etc/crontabs/root中内容果然不再莫名地消失了。

其实,OpenwWrt提供的/etc/config的机制很好,一是便于手动维护,二是有利于自动化处理。

/etc/init.d/cron脚本的那三行,rm一行是为了不至于添加重复的cron项,但这样也导致了通过其它方式添加的cron项失效,而删除了那三行,/etc/config/cron配置文件将不再起作用。前面说了,配置文件有好的一面,但是crontab -e显然比配置文件清晰明了,权衡之下,还是舍弃了配置文件。

附:更改后的/etc/init.d/cron 文件。

这个问题只在某些特定的OpenWrt版本中存在。

以下contab的使用,来自http://www.centos.bz/2011/03/auto-run-task-crontab/

crontab用法

crontab的格式如下面:

f1 f2 f3 f4 f5 program
分 时 日 月 周 执行的命令

其中f1 表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行程式的路径。

管理员登录SSH,输入命令crontab -e编辑crontab文件,根据上面的格式输入并保存。

crontab例子

每月每天每小时的第 0 分钟执行一次 /bin/ls :

0 * * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :

\*/20 6-12 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 alex@domain.name :

0 17 * * 1-5 mail -s "hi" alex@domain.name </tmp/maildata

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo “haha”

20 0-23/2 * * * echo "haha"

晚上11点到早上8点之间每两个小时,早上8点

0 23-7/28 * * * date