最近在使用QuantumultX这个软件,其中有用到Cron,有些忘了,于是参考了一些资料,又复习了一遍,特此作个记录,以便随时翻阅。
一.Cron表达式
- 计划任务,在约定时间完成执行已经计划好的工作。实际上是由几个子表达式组成,他们之间用空格分隔,
- Cron表达式有两种语法:
(1)秒 分 时 天 月 星期 年
(2)秒 分 时 天 月 星期
二、各字段的含义
- 秒:允许设置的值为 0-59,可以出现 , - * / 这4个特殊字符
- 分:允许设置的值为 0-59,可以出现 , - * / 这4个特殊字符
- 时:允许设置的值为 0-23,可以出现 , - * / 这4个特殊字符
- 天:允许设置的值为 1~31,可以出现 ,- * ? / L W C 这8个特殊字符
- 月:允许设置的值为 (1-12)或者(JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV,DEC), 可以出现 , - * / 这4个特殊字符
- 星期:允许设置的值为 (1~7)或者(SUN, MON, TUE, WED, THU, FRI, SAT),这里1是对应SUN的,不要搞 错,可以出现 , - * ? / L C # 这 8个特殊字符
- 年:允许设置的值为 1970~2099,可以出现 , - * / 这4个特殊字符
三、特殊字符的含义
" * ": 代表所有可以匹配的值
" - ": 代表一个范围,比如在秒中“0-3”,代表0-3秒
" , ": 在同一个表达式中使用,代表依次被执行的时间,比如在分钟里“5,10”,代表在第5分钟和10分钟分别执行一次
4.“ / ": 表示一个步进,每过多长时间执行一次,用在同一个表达式里,比如“5/2”,代表从第5分钟开始,每过2分钟执行一次
5.“ ? ": 只能用在日和星期中。它也匹配域的任意值,但实际上表示不关心这个字段的值。因为日和星期会相互影响。例如想在每月的20日的0时0分0秒触发,不管20日到底是星期几,则只能使用如下写 法: "0 0 0 20 * ?", 其中最后一位只能用“?”,而不能使用"*" , 如果使用了,那么表示不管星期几的0点0分0秒这个时间,都会触发一次
- " L ": 代表最后一个可用的时间,"Last"的缩写,只能用在月份,星期表达式中。
- 如果“L”前无内容,两个表达式中含义分别是:
月:“L”在月中表示一个月的最后一天,1月31号,4月30号,等等
星期:“L”在星期中表示一个星期的最后一天,也就是“7”或者“SAT” - 如果“L" 前有内容,那么就有另一个含义了,比如在星期中"5L",表示最后一个星期的星期4,在月中"5L”,表示 这个月的倒数第5天。
- 如果“L”前无内容,两个表达式中含义分别是:
7.“W": 代表”Weekday“(只有星期一星期五为工作日),只能用在月中,表示只在指定日期的最近有效工作日 触发,比如"12W",是个星期六,那么会在星期五,也就是11日执行。如果“12W"是个星期日,那么会在星 期一,13日执行。
"LW": 连用表示在某个月最后一个工作日,即最后一个星期五。
"#": 只能用在星期,表示某月的第几个星期几,比如“5#3",表示某月的第3个星期4
四、举例练习,巩固成果
1."30 * * ?" :由于后面全是任意匹配值,所以为每分钟的第30秒都执行
2."30 10 1 20 * ?":表示每月20日的1时10分30秒执行
3."30 10 1 ? 10 SUN 2020":表示2020年10月的每个星期日的1时10分30秒执行
4."15,30,45 * * ?":表示每分钟的第15秒,30秒,45秒都执行一次
5."15-45 * * ?":表示从第15秒开始到45秒,每秒都执行一次
6."0 0/3 * ?":表示 每小时的第0分0秒开始,每三分钟触发一次
7."0 15 10 ? * 5L":表示每个月最后一个星期四的10点15分0秒触发任务
8."0 15 10 ? * 6#3":表示每月的第三个星期五上午10:15触发