cron原来是UNIX的工具之一,主要用于进行任务调度,cron核心使用的就是cron表达式来处理任务调度,一个cron表达是由6~7个域组成并且以空格分隔的字段串,以下为一个简单的cron表达式:10 * * * * ?,表示每分钟的第10秒将会触发。
一个完整的cron表达式总共有7个域(以空格分隔),从左到右表示秒、分、小时、月份中的日期、月份、星期中的日期和年份,其中年份域为可选项,例如有以下cron表达式:1 2 3 4 5 ? 2013,该表达式共有7个域,以空格分隔,该表达式2013年5月4日03时2分1秒,在该表达式中,第6个域(星期中的日期)使用了问号,表示并不需要关心该域,由于该表达式指定了第4个域(月份中的日期),因此此处使用问号,可以理解为不关心5月4日是星期几。以下描述了cron表达式中的符号及其作用:
*:允许该域使用全部的值。假设在秒域的值为10且分钟域为*,那么意味着每一分钟的第10秒将会符合表达式条件。
?:只允许出现在第4个域(月份中的日期)和第6个域(星期中的日期),表示不关心该域的取值,由于两个域取值可能存在冲突,因此为不关心取值的域使用该符号。
-:该符号表示范围,假设将第3个域(小时)设置为10-12,则表示10点到12点。
,:该符号表示一个域内并列的多个值,例如第4个域(月份中的日期)值为2,4,8,表示2号、4号和8号会触发。
/:使用该符号设置步长,假设将第1个域(秒)设置为5/15,表示从第5秒开始,步长为15,即第5、20、35、50秒时均会触发。
L:英文Last的缩写,如果出现在第4个域(月份中的日期),则为每个月的最后一天,如果出现在第6个域(星期中的日期),则表示该星期的最后一天(周六),如果该符号出现在某个值后,如第6个域值为6L,则表示该月的最后一个星期5.
W:英文weekday的缩写,表示周一到周五(工作日),该符号只能出现在第4个域(星期中的日期)并且只能与其他值组合使用,如15W,则表示该月中与15号最接近的工作日。另外,L和W可以在第4个域中混合使用,表示该月的最后一个工作日。
#:该符号只能出现在第6个域(月份中的日期),表示该月的第几天,如果设置为#5,表示该月的第5天;如果设置为4#3,则前面的4表示星期中的日期,即4#3表示该月的第3个星期三(7是周6)。
各个符号允许出现的域以及第个域的取值范围
秒:必选项,取值范围0~59,允许出现的符号有“,- * / ”。
分钟:必选项,取值范围0~59,允许出现的符号有“,- * / ”。
小时:必选项,取值范围0!23,允许出现的符号有“,- * / ”。
月份中的日期:必选项,取值范围为1~31,允许出现的符号有“,- * / ”。
月份:必选项,取值范围为1~12或者月份的英文缩写,允许出现的符号有“ , - * / ”。
星期中的日期:必选项,取值范围为1~7或者英文缩写,允许出现的符号有“ , - * / L # ”。
年份:非必选项,取值范围为1970~2099,允许为空值,允许出现的符号有“ , - * /”。
* * 18 ? 1,2,3,4,5 表示周一到周五的18点