对于作过 Web 开发的人来讲,定时任务这个东西应该不会感到陌生;而说到定时任务,就应该都会想到 Crontab ,即便想不到,百度谷歌一下,返回的大部分结果都是指向 Linux 的 Crontab 的!面试
最近在找工做,除了面试以外,倒也没什么重要的事情了。趁着有时间,正好总结一下 Crontab 的知识点,万一恰好被哪一个面试官问道了呢 ^_^工具
我如今还记得第一次使用 Crontab 是一个什么场景。当时是本身一我的独立开发一个游戏金币商城,主要服务的对象是海外的客户,包括美国、泰国等。金币商城的默认币种是美圆($),固然能够切换成泰铢(฿)、欧元(€)等。币种之间的转换是以美圆为单位,根据各币种与美圆之间的汇率来转换的。.net
商城开发完成,上线一段时间以后,老板忽然找到我说,“小陈啊,泰国有个家伙买了 10000 龙之谷的 金币,它付款的金额怎么不对啊?”。我就赶忙检查是计算错误呢仍是什么其余缘由了。code
后来发现是币种之间的汇率天天变化形成的,后来经过 Crontab 定时更新汇率数据来避免这个问题。对象
就这样,我了解到了 Crontab。游戏
命令语法:crontab
crontab [-u user] [-l | -r | -e]
经常使用参数的含义:开发
参数 | 含义
---|---
-u user | 指定特定的用户;若是该选项缺省,则默认操做命令执行者的
-l | 显示当前的定时任务
-r | 删除当前的定时任务
-e | 编辑当前的定时任务文档
* * * * * 命令 | | | | | | | | | +---> 星期几(0 ~ 6),0 = 星期天 | | | +-------> 月份(1 ~ 12) | | +-----------> 几号(1 ~ 31) | +---------------> 小时(0 ~ 23) +-------------------> 分钟(0 ~ 59)
如上所示,Crontab 任务由两部分组成,前面星号部分表明时间,后面表明须要执行的命令。get
*
,表示“从头至尾” *
,则表示每分钟执行一次-
表示,表示某个区间 12-15
,表示在 12
,13
,14
,15
小时1,2,5,9
或者 0-4,8-12
10-18/2
,表示在 10 到 18 小时之间每两小时 */2
,表示没两小时看语法老是枯燥的,来看几个例子就会明白了。
首先是打开并编辑当前用户的 Crontab 任务:
crontab -e
在终端上使用上面命令便可。
每分钟执行一次命令
*/1 * * * * date >> /tmp/test.log
每小时执行一次命令
0 * * * * date >> /tmp/test.log
天天凌晨 3 点执行一次命令
0 3 * * * date >> /tmp/test.log
在天天的第 九、十、十二、17 小时执行一次命令
0 9,10,12,17 * * * date >> /tmp/test.log
在每个月的 1 ~ 10 号的 九、18 小时的每 10 分钟执行一次命令
*/10 9,18 1-10 * * date >> /tmp/test.log
Crontab 是个经常使用的定时任务工具,可是它的最小时间单位是分钟,也就是说,若是你想设置精确到秒钟的定时任务,那么 Crontab 就无能为力了。
可是我有在 workerman 的文档中看到,他已经实现了一个毫秒级别的定时器,若是有需求,能够研究研究哈。