$ ls ~yifei/notes/

Crontab 的语法和使用

Posted on:

Last modified:

Unix Crontab 时间的语法:

Minute Hour Day Month DoW

每一个选项默认都是第几的意思

  • Minute, 每小时的第几分,可选值 0-59
  • Hour, 每天的第几个小时,可选值 0-23
  • Day of month, 每月的第几天,可选值 1-31
  • Month, 每年的第几个月,可选值 1-12
  • Day of week, 每周的第几天,可选值 0-7, 0 和 7 都代表 Sunday
  • Command, 要执行的命令

另外:

  • 用 * 表示所有
  • 可以用逗号分隔指定多个
  • */xx 表示每 xx 一次

比如

5 * * * * echo "hello world"

每小时的第五分钟打印 hello world

更多地例子

* * * * *    每分钟
12 * * * *    每小时第 12 分
0,15,30,45 * * * * 每小时的第 0, 15, 30, 45 分,也就是每 15 分钟一次
0 4 * * *    每天的凌晨 4 点
0 4 * * 2    每周二的凌晨 4 点
*/4 2-6 * * *    2 点和 6 点之间每 4 分钟一次,也就是 0, 4, 8...

crontab 命令

应该使用 crontab 命令来编辑 crontab 文件,tab 就是 table 的缩写

crontab -e # 编辑 crontab
crontab -l # 列出 crontab
crontab -u # 指定用户

crontab 还支持一些特殊语法

@hourly 相当于 0 * * * * 也就是每小时执行
@daily  相当于 0 0 * * * 也就是每天执行
@weekly 相当于 0 0 0 0 0
@monthly
@yearly
@reboot  at reboot

NOTE:

# add these line to tweak cron behavior
SHELL=/bin/bash
HOME=/
MAILTO="example@digitalocean.com"

Cron 表达式的局限性

cron 表达式难以表达 "every x" 这个语义。比如说每隔 9 个小时如何, 每隔 13 分钟如何如何。

Quartz Cron

除了 Unix Cron 之外,另一个比较流行的 cron 格式是 Java 中的 Quartz 库使用的 cron。由于 Hadoop 生态系统是基于 Java 的,所以在大数据领域,Quartz 格式可能更流行一点。

Quartz 格式的区别在于:

  • 支持秒
  • 增加了 ? 通配符,用于表示未指定,类似 undefined

具体定义为:

sec min hour day-of-month month day-of-week year

当使用 day-of-month 时,不能使用 day-of-week,反之亦然,否则会造成冲突。所以 quartz 表达式一般都是这样的形式:

0 0 * * * ?

参考

  1. http://www.unixgeeks.org/security/newbie/unix/cron-1.html
  2. http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html
WeChat Qr Code

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.

友情链接: MySQL 教程站