cron是一个Unix-like的定时软无工具。
OverviewCron 是由一个crontab文件驱动的。通常位于/etc目录或其子目录内。crontab file的每一行都是一个任务,大概像这样:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command to execute
两个例子:
- 每天00.01清除日志文件:
1 0 * printf "" > /var/log/apache/error_log
- 每个周六23.45执行一个sh文件
45 23 6 /home/oracle/scripts/export_dump.sh
有两个相关文件:
- /etc/cron.allow
- /etc/cron.deny
这两个文件里面存的是用户名。比如:root nick dee sarah
表格如下 属性 |
必须 | 值域 |
---|---|---|
分钟 | Y | 0-59 |
小时 | Y | 0-23 |
日期 | Y | 1-31 |
月份 | Y | 1-12 |
星期 | Y | 0-6 |
年份 | N | 1970-2099 |
标准特殊字符注意:在星期属性中,0代表周日,6代表周六
逗号,
用于分割同一个属性的不同时间,比如每周一和周三:1,3
短横线-
表示一个时间范围,比如周一到周三:1-3
百分号%
代表换行符,除非用反斜线\转义。并且第一个%后面的所有数据都将作为标准输入发送到命令中。
非标准字符(仅在某些cron实现支持)L
代表Last。比如一个月的最后一个星期五:5L
W
用于日期属性,表示距离给定日期最近的工作日,比如15W表示:距离这个月15号最近的工作日。
Hash
m#n表示第n个星期m。比如:5#3表示这个月的第三个星期五。
问号?
表示占位符。比如? ? * * * *
,如果在8:25启动的话,就会被解析成25 8 * * * *
。
斜杠/
可以用于表示时间间隔。比如*/5
表示每5分钟。
需要注意的是必须得能够被整除。比如表示分钟间隔就必须得被60整除,想表示小时间隔就必须得被24整除。
Quartz是一个Java定时任务框架。下篇再做分享。
参考资料