在编写和记录计时器时使用。
Cron 表达式是字符串,由5 或6 个空格分隔,每个字段代表两种语法:
格式:
秒分钟小时某月某日某月某日年或
秒分钟小时某月某日某月某日某周某日
每个字段中可以显示的字符有:
代码
Seconds: 可以显示- */4 个字符,有效范围为0 到59 之间的整数。
Minutes: 可以显示- */4 个字符,有效范围为0 到59 之间的整数。
hours: 可以显示- */4 个字符,有效范围为0 到23 之间的整数。
DayofMonth: 显示为- */? L W C 8 个字符。有效范围是0 到31 之间的整数。
Month:可以用-*/4个字符显示。有效范围是1 到12 或JAN 到DEc 之间的整数。
DayofWeek: 显示为四个字符:- */? L C #。有效范围是1 到7 之间的整数,或两个范围:SUN-SAT。 1 表示星期日,2 表示星期一。
可以显示年份: – */4 个字符,有效范围为1970-2099。
每个字段都使用数字,但也允许使用以下特殊字符:这就是它的含义:
(1)*:表示使用与该字段匹配的值。如果分钟字段中使用*,则表示每分钟都会触发该事件。
(2)? 只能与DayofMonth 和DayofWeek 域一起使用。它也匹配域中的任何值,但事实并非如此。这是因为DayofMonth 和DayofWeek 相互影响。
例如,如果你想在每个月的20号触发一个日程,那么无论20号是星期几,都只能使用下面的语句:13 13 15 20 * ?只有最后一位数字。已使用? 代替*,
* 用于表示无论星期几都会触发,但实际情况并非如此。
(3)-:表示范围。例如,在“分钟”字段中使用“5-20”表示从5 分钟到20 分钟每分钟触发一次。
(4)/:表示从开始时间开始触发,然后每隔一定时间触发一次。例如,在分钟字段中使用5/20 表示每5 分钟触发一次,并在25、45 和20:00 触发一次。 ETC
(5)、表示列表枚举值。例如,在“分钟”字段中使用5,20 意味着它将每5 分钟和第20 分钟触发一次。
(6) L: 表示最后且仅出现在DayofWeek 和DayofMonth 字段中。如果DayofWeek字段使用5L,则表示在最后一个星期四触发。
(7) W: 表示有效工作日(周一至周五),并且仅出现在DayofMonth 字段中。系统会在距离指定日期最近的有效工作日触发事件。
例如,如果您对DayofMonth 使用5W,如果5 号是星期六,则它将在最近的工作日(即4 号星期五)触发。如果5号是周日,则6号触发。
如果5 日落在周一和周五之间,则在5 日触发。还有一点是,W最近的搜寻时间还没有跨越几个月。
(8) LW: 两个字符可以组合使用,表示特定月份的最后一个工作日,即最后一个星期五。
(9) #: 用于确定每个月的星期几,仅出现在DayofMonth 字段中。例如,4#2 指的是某个月的第二个星期三。
让我举几个例子:
0 0 2 1 * ? * 表示将任务安排在每月1 号凌晨2 点
0 15 10 ? * MON-FRI 表示作业在周一至周五每天上午10:15 运行。
0 15 10 ? 6L 2002-2006 表示作业10:15 在200 到2006 年每个月最后一个星期五上午的运行。
91 Linux
一个cron 表达式至少包含六个(也可能是七个)时间元素,并用空格分隔。
为了,
秒(0~59)
分钟(0~59)
时间(0-23)
该月的第几天(0-31,但必须考虑该月的天数)
月份(0~11)
日(周)(1-7 1=SUN 或SUN、周一、周二、周三、周四、周五、周六)
7.年份(1970-2099)
每个元素可以是一个值(如6)、连续区间(9 到12)、区间(8 到18/4)(/表示每4 小时)、列表(1, 3, 5)或您可以指定。
“天”和“星期几”这两个元素是互斥的,因此必须设置其中之一。
0 0 10、14、16 * * 每天上午10 点、下午2 点、下午4 点
0 0/30 9-17 * * ? 工作时间上午9 点至下午5 点每30 分钟一班
0 0 12 ? * WED 表示每周三中午
“0 0 12 * * ?”每天中午触发
每天早上在10:15 触发“0 15 10 ? * *”。
“0 15 10 * * ?”每天早上在10:15 触发。
“0 15 10 * * ? *”每天早上在10:15 触发。
2005 年每天早上在10:15 上触发“0 15 10 * * 2005”
每天下午2 点到下午2:59 每分钟触发一次“0 * 14 * * ?”
每天下午2 点至2:55 点每5 分钟触发一次“0 0/5 14 * * ?”
‘0 0/5 14,18 * * ?’ 从下午2 点到2:55 每5 分钟触发一次,从下午6 点到6:55 每5 分钟触发一次
每天下午2 点到2:05 点每分钟触发一次“0 0-5 14 * * ?”
“0 10,44 14 ? 3 WED”在三月份的每个星期三下午在2:10 和2:44 触发。
“0 15 10 * MON-FRI”在周一至周五早上触发10:15。
‘0 15 10 15 * ?’ 每月15号上午由10:15触发
‘0 15 10 L * ?’ 每月最后一天早上触发10:15
每月最后一个周五上午触发“0 15 10 ? * 6L” 10:15
‘0 15 10 ? * 6L 2002-2005’ 在2002 年至2005 年每月的最后一个星期五上午触发10:15
“0 15 10 ? * 6#3” 每月第三个星期五上午触发10:15
某些子表达式可以包含范围或列表
示例:子表达式(天(周))变为“MON-FRI”、“MON、WED、FRI”、“MON-WED、SAT”。
‘*’字符代表所有可能的值
因此,子表达式(月)中的“*”代表每个月的含义,子表达式(日(周))中的“*”代表一周中的每一天。
“/”字符用于指定值增量。
示例:子表达式(分钟)中的“0/15”表示从0 分钟开始,每15 分钟一次。
子表达式(分钟)中的“3/20”表示从3 分钟开始每20 分钟一次(与“3,23,43”含义相同)
‘?’ 字符仅在两个子表达式中使用:日(月)和日(周),以指示未指定值。
如果为两个子表达式之一赋值,则另一个子表达式的值必须设置为“?”以避免冲突。
“L”字符仅在日(月)和日(周)子表达式中使用,并且是单词“last”的缩写。
然而,这两个子表达式具有不同的含义。
天(月)子表达式中的“L”表示该月的最后一天
在天(周)的自我表达中,“L”代表一周的最后一天,即SAT
如果“L”前面有特定的东西,则有其他含义
例如:“6L”表示本月第6 日至最后一天,“FRIL”表示本月最后一个星期五
注意:使用“L”参数时,请勿指定列表或范围,因为这可能会导致问题。
字段允许值允许特殊字符
秒0-59, – * /
分钟0-59,- * /
时间0-23,-*/
日期1-31,- */L W C ?
1 月至12 月或1 月至12 月,- * /
周日1-7 或周日至周六,- */L C #
年份(可选)留空,1970-2099,- */
请注意, 天和周是其中之一。
? 代表必填
*:代表每年
秒分钟小时日星期一年
0 0 0 10 12 ? 2009 //表示: 于2009 年12 月10 日0:00:00 执行(星期几:’?’ 表示忽略)
0 0 0 10 12 ? * //代表:每年12月10日0:00:00运行
0 0 0 10 * //代表:每月10号0:00:00运行。
0 0 1 1 * //代表:每月1号1:00:0运行。
0 0 1 1 3,6,9 ? //: 代表3 月、6 月和9 月,在当天的1:00:00 运行。
0 0 1 1 2-5 ?
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/81724.html