楼主: 
laechan (挥泪斩马云)   
2017-12-31 20:58:39根据鸟哥的 Linux 私房菜
http://linux.vbird.org/linux_basic/0430cron.php#whatiscron_type
> crontab -e
  # 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。
  0   12  *  *  * mail -s "at 12:00" dmtsai < /home/dmtsai/.bashrc
  #分 时 日 月 周 |<==============指令串========================>|
  这部份就类似 note change 指令,会进入 note 的编辑画面,使用者可以
  add/del/insert/edit 任何一行或是增删掉一行。
  换言之 crontab 也可以参考 note 的写法,关键就是每一个排程一行。
  范例
  59 23 1 5 * mail kiki < /home/dmtsai/lover.txt
  5/1 23:59,执行 mail kiki 的动作,mail 的内容写在 lover.txt 内。
  所以若是 sanc 的黑市拍卖会的话,就可能是这样
  59 23 1 5 * /cmds/std/_blarket < 执行哪一个脚本档进来
  写成这样是可以的,流控可以完全交给脚本档,这样 crontab 实际上只
  管理排程以及对 times_check 的设定。
  不过上面的显示格式我会改一下,会增加“谁是排程设定者”。
> crontab -l
  就是像 note 指令或 note -list 指令看到的显示结果。
> crontab -r
  这个是清掉所有 crontab,不会写。
> crontab -u username
  这个就是列出哪些排程是 username 这个使用者设定的。
语法就上面四个而已,所以关键在于理解下面的东西
59 23 1 5 * blarket < 执行哪一个脚本档进来
然后编辑时照规定的字段填入资料即可。
字串处理时:
 sscanf(str,"%s %s %s %s %s %s < %s",
            min,hour,day,mon,week,ob_files,script_files);
设定时
 times=依 ({min,hour,day,mon,week}) 综合计算后得出的时间数值
 times_check->set_times_check(names,files,
                              ({min,hour,day,mon,week,script_files}),
                              times
                             );
 // 然后如果有 loop 的情况时就在这个地方也顺便做 loop 的设定
 times=依 ({min,hour,day,mon,week}) 综合计算后得出的下一 loop 设定时间
 times_check->set_times_check(names,files,
                              ({min,hour,day,mon,week,script_files}),
                              times
                             );
这样就设好了,crontab -e 也可以看到该行设定。
接着是 times_check 的处理,理论上会长这样
int times_check(string names,string files,mixed tmps,int times)
{
 先读出 tmps[5] 以得到脚本档内容,包含该呼叫的函数;
 (该呼叫的函数也可以统一,比方叫做 exec_crontab)
 ob=find_object_or_load(files);
 call_other(ob,该呼叫的函数,...);
只要确定 call_other 的呼叫型式即可。
不过最难的就是这个 * 判断了,crontab 的核心就在这里,编写很简单,
后端的程式判断就很困难,随便举几个
1 * * * *  每个小时的 "1分" 的时候 loop 一次  = 3600秒loop一次
* 1 * * *  每天的 "1点" 的时候 loop 一次      = 86400秒loop一次
* * 1 * *  每个月的 "1号" 的时候 loop 一次    = 无规律,依月份决定
* * * 1 *  每年的 "1月" 的时候 loop 一次
* * * * 1  每周的 "星期一" 的时候 loop 一次
这五种都是理论上可能存在的,这四种也不难写,难的是 * 小于 4 个的
情况,且有使用到 - 的情况,例如
00 09 * * 1-5   星期一到五,每天的 9:00
10 12 29 9 *    每年的 9/29 12:10 分
15 5-7 * * *    每天的 5:15、6:15、7:15 分
而且是五个字段都可以用 - 的场合。
要完全具现 * 及 - 的使用并不是不行,但是以这个为例
15 5-7 * * *