rundeck的crontab任务不同于Linux上边的,它精确到秒级别。另外它还存在几个关键的注意事项。

官网链接:http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger



定时任务教程

介绍

cron is a UNIX tool that has been around for a long time, so its scheduling capabilities are powerful and proven. TheCronTrigger class is based on the scheduling capabilities of cron.

CronTrigger uses "cron expressions", which are able to create firing schedules such as: "At 8:00am every Monday through Friday" or "At 1:30am every last Friday of the month".

Cron expressions are powerful, but can be pretty confusing. This tutorial aims to take some of the mystery out of creating a cron expression, giving users a resource which they can visit before having to ask in a forum or mailing list.

格式

一个cron表达式包含6或7个字段,用空格隔开(跟Linux的大致相同),字段(特殊字符)等格式如下

字段名 强制性 允许值 允许的特殊字符
Seconds YES 0-59 , - * /
Minutes YES 0-59 , - * /
Hours YES 0-23 , - * /
Day of month YES 1-31 , - * ? / L W
Month YES 1-12 or JAN-DEC , - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L #
Year NO empty, 1970-2099 , - * /

这样的表达式很简单,如下(其实不简单,如果你曾被他折腾过): * * * * ? *

or 复杂的表达式, 看这个: 0/5 14,18,3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010


特殊字符

  • * ("所有值") - 用来选择一个字段中的所有值. 例如, "" 在分的字段中使用 *" 等价于 "每分钟".  

  • ? ("没有具体的值") - 官方的例如有点**,我这里来解释下,在7个字段中,其中第4个和第六个是相克的。第四个是(day of month ),第六个是(day of week),这个时候, "?"就是来跳过一个的作用。

  • - - 用于指定范围。 例如,在小时字段“10-12”表示“小时的10,11和12”。

  • , - 用于指定额外的值。 例如,“星期一,星期三,星期五”的意思是“星期一,星期三和星期五”。

  • / - 用来指定增量。 例如,“0/15”,在秒字段的意思是“秒0,15,30,和45”。在秒字段中“5/15”的意思是“秒5,20,35,和50”。 你也可以这样指定,打个比方,月的字段 “2/5”,这个意思就是说从月的2号起,+5天,继续执行。

  • L ("last") - 2个字段中可以使用它,并且意义不同。例如,在“月”字段中使用它,表示,这个月的最后一天,例如31号,你在2月肯定没法指定,那么这个就起了作用了。如果在“day-of-week”字段中使用它,表示"7"或者"SAT",也就是周六。另外一个例子,如果你使用L跟在一个值的后边,比如"6/L",那么他表示这个这个月的最后一个周五。如果使用了"L",那么就不要指定它的列表或者范围。

  • W ("weekday") - 用于指定工作日(周一至周五)最近的某一天。举个例子,如果你要指定“15W”作为日常的一个月的字段中的值,意思是:“最近的工作日到本月15日。”所以,如果15日是星期六,触发器将触发上周五的第14天。如果15日是星期天,触发器将触发周一16日。如果15日是星期二,那么它匹配上周二15号。但是,如果您指定“1W”作为日 - 月之 - 的值,第一天是星期六,触发器将触发周一3号,因为它不会“跳”过了一个月的界限。注意:他只能是指定的单一的天,而不是多个。

'L'和'W'字符,也可以在一个月中相结合,以产生'LW',它转换为*“每月最后一个工作日”*。
  • # - 用于指定月份的第几天。 例如在(day of week)字段中写入"6#3",那么它的意思是这个月的第三个星期的星期五。如果你只写了"#5",那么没有第五个周的月不会被匹配。


例子

Here are some full examples:

Rundeck crontab格式_第1张图片

注意点

  • 秒级别如果使用了* ,将使脚本无限启动