cron是一个Unix-like的定时软无工具。
Overview
Cron 是由一个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
cron 表达式
表格如下
属性
必须
值域
分钟
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定时任务框架。下篇再做分享。
参考资料