Crontab 定时任务

对于作过 Web 开发的人来讲,定时任务这个东西应该不会感到陌生;而说到定时任务,就应该都会想到 Crontab ,即便想不到,百度谷歌一下,返回的大部分结果都是指向 Linux 的 Crontab 的!面试

最近在找工做,除了面试以外,倒也没什么重要的事情了。趁着有时间,正好总结一下 Crontab 的知识点,万一恰好被哪一个面试官问道了呢 ^_^工具

我如今还记得第一次使用 Crontab 是一个什么场景。当时是本身一我的独立开发一个游戏金币商城,主要服务的对象是海外的客户,包括美国、泰国等。金币商城的默认币种是美圆($),固然能够切换成泰铢(฿)、欧元(€)等。币种之间的转换是以美圆为单位,根据各币种与美圆之间的汇率来转换的。.net

商城开发完成,上线一段时间以后,老板忽然找到我说,“小陈啊,泰国有个家伙买了 10000 龙之谷的 金币,它付款的金额怎么不对啊?”。我就赶忙检查是计算错误呢仍是什么其余缘由了。code

后来发现是币种之间的汇率天天变化形成的,后来经过 Crontab 定时更新汇率数据来避免这个问题。对象

就这样,我了解到了 Crontab。游戏

关于 Crontab 命令

命令语法:crontab

crontab [-u user] [-l | -r | -e]

经常使用参数的含义:开发

参数 | 含义
---|---
-u user | 指定特定的用户;若是该选项缺省,则默认操做命令执行者的
-l | 显示当前的定时任务
-r | 删除当前的定时任务
-e | 编辑当前的定时任务文档

Crontab 任务的语法
*   *   *   *   *   命令
|   |   |   |   |
|   |   |   |   +---> 星期几(0 ~ 6),0 = 星期天
|   |   |   +-------> 月份(1 ~ 12)
|   |   +-----------> 几号(1 ~ 31)
|   +---------------> 小时(0 ~ 23)
+-------------------> 分钟(0 ~ 59)

如上所示,Crontab 任务由两部分组成,前面星号部分表明时间,后面表明须要执行的命令。get

  • 星号、字段能够设置为星号 * ,表示“从头至尾”
    例如在分钟那里设置 * ,则表示每分钟执行一次
  • 范围、范围由两个数字加中间一个连字符 - 表示,表示某个区间
    例如在小时那里设置 12-15,表示在 12131415 小时
  • 列表、一个由逗号隔开的数字或范围的列表是容许的
    例如 1,2,5,9 或者 0-4,8-12
  • 步数值、步数值能够和范围一块儿使用
    例如在小时那里设置 10-18/2 ,表示在 10 到 18 小时之间每两小时
    固然,这样子也是能够的 */2,表示没两小时
一些例子

看语法老是枯燥的,来看几个例子就会明白了。

首先是打开并编辑当前用户的 Crontab 任务:

crontab -e

在终端上使用上面命令便可。

  1. 每分钟执行一次命令

    */1 * * * * date >> /tmp/test.log
  2. 每小时执行一次命令

    0 * * * * date >> /tmp/test.log
  3. 天天凌晨 3 点执行一次命令

    0 3 * * * date >> /tmp/test.log
  4. 在天天的第 九、十、十二、17 小时执行一次命令

    0 9,10,12,17 * * * date >> /tmp/test.log
  5. 在每个月的 1 ~ 10 号的 九、18 小时的每 10 分钟执行一次命令

    */10 9,18 1-10 * * date >> /tmp/test.log
最后

Crontab 是个经常使用的定时任务工具,可是它的最小时间单位是分钟,也就是说,若是你想设置精确到秒钟的定时任务,那么 Crontab 就无能为力了。

可是我有在 workerman 的文档中看到,他已经实现了一个毫秒级别的定时器,若是有需求,能够研究研究哈。

相关文章
相关标签/搜索