表达式"/>
浅谈:cron表达式
目录
1. cron表达式的结构
2. cron每个域的取值范围
3. cron符号的意义
(1)* 通配符
(2)?
(3)-
(4),
(5)/
(6)#
(7)L
4. 一些常见的实例
1. cron表达式的结构
cron表达式是一个字符串,有5位 (Linux中的crontab命令中就是5位)、6位、7位之分,不同位数之间以空格分隔
位数 | 每位的含义 |
---|---|
5位:* * * * * | 分、时、天、月、周 |
6位:* * * * * * | 秒、分、时、天、月、周 |
7位:* * * * * * * | 秒、分、时、天、月、周、年 |
其语法格式为:
"秒域 分域 时域 日域 月域 周域 年域"
在大部分情况下会省略年这一位,成为6位,省略时表示每年。再省略秒,就成为5位。
注意:Linux中的crontab表达式只有5位。
2. cron每个域的取值范围
域名 | 可取值 | 可取符号(仅列部分常用) |
秒域 | 0~59的整数 | * - , / |
分域 | 0~59的整数 | * - , / |
时域 | 0~23的整数 | * - , / |
日域 | 1~31的整数 | * - , / ? L |
月域 | 1~12的整数或JAN~DEC | * - , / |
周域 | 1~7的整数(星期天为1)或SUN~SAT 对于星期,最好使用英文缩写,更加清晰 | * - , / ? L # |
年域 | 1970~2099的整数 | * - , / |
* * * * * * *
- - - - - - -
| | | | | | |
| | | | | | +----- 年域 (1970 ~ 2099)
| | | | | +---------- 周域 (1 ~ 7 或 SUN ~ SAT) (星期天 为1)
| | | | +--------------- 月域 (1 ~ 12 或 JAN ~ DEC)
| | | +-------------------- 日域 (0 ~ 31)
| | +------------------------- 时域 (0 ~ 23)
| +------------------------------ 分域 (0 ~ 59)
+----------------------------------- 秒域 (0 ~ 59)
3. cron符号的意义
(1)* 通配符
表示可以匹配该域的所有值;
例如,"0 0 13 * * ?"表示每天的13点执行一次。
(2)?
在cron表达式中必须出现且只能出现1次,用在日域或周域上,表示不确定值、不限制值;
它与*的区别是,并不能匹配到该域上的所有值,例如指定了3月份每个周五,那么3月份的周五可能只有4个值;
例如,"0 0 5 6 * ?"表示每个月6日5点钟执行而无论周几,"0 0 5 ? * 3"表示每个周三5点钟执行而无论是几号。
(3)-
表示匹配该域上的一个范围;
例如,"0 30 9-15 ? * *"表示每天的9:30-15:30每小时执行一次,"0 1-5 * ? * 1"表示每周日每个小时的1-5分钟每分钟执行一次。
(4),
表示枚举值;
例如,"0 0 8,16,23 ? * 1,7"表示每个周六日的8点、16点、23点各执行一次。
(5)/
表示起始时间和间隔时间;
例如,"0 0 3/5 * * ?"表示每天3点开始执行,每隔5个小时执行一次,即3点、8点、13点、18点、23点各执行一次,
"*/5 * * * * ?"表示每隔5秒钟执行一次,"0 */1 * * * ?"表示每隔1分钟执行一次。
(6)#
只能用于周域上,#后面的数字表示第几周,如果不存在这个周的值,则不执行;
例如,"0 0 0 ? * 5#2"表示每个月第2个周四零点执行,"15 30 6 ? * 7#5"表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行。
(7)L
只能用于日域或周域,用于日域时表示当月最后一天,用于周域如果前面不加数字表示周六,加数字表示最后一个周值;
例如,"0 0 23 L * ?"表示每月最后一天的23点执行,"0 0 23 ? * L"表示每周六的23点执行,"0 0 23 ? * 3L"表示每月最后一个周二的23点执行。
4. 一些常用实例
执行时间 | cron表达式 |
每隔5秒钟执行一次 | */5 * * * * ? |
每隔1分钟执行一次 | 0 */1 * * * ? |
每天凌晨1点执行一次 | 0 0 1 * * ? |
每天23点55分执行一次 | 0 55 23 * * ? |
每月最后一天23点55分执行一次 | 0 55 23 L * ? |
每周六9点执行一次 | 0 0 9 ? * L |
每月最后一个周五,每隔2小时执行一次 | 0 0 */2 ? * 6L |
每月的第三个星期五上午9:15执行一次 | 0 15 9 ? * 6#3 |
在每天中午12点到12:05期间的每1分钟执行 | 0 0-5 12 * * ? |
表示周一到周五每天上午9:15执行 | 0 15 9 ? * 2-6 |
表示周一到周五每天上午9:15执行 | 0 15 9 ? * MON-FRI |
每个月的最后一个星期五上午9:15执行 | 0 15 9 ? * 6L |
每天10点,12点,16点 各执行一次 | 0 0 10,12,16 * * ? |
朝九晚五工作时间内每半小时执行一次 | 0 0/30 9-17 * * ? |
每个星期三中午12点执行一次 | 0 0 12 ? * 4 |
每年三月的星期三的下午2:10和2:44各执行一次 | 0 10,44 14 ? 3 4 |
每年三月的每周三的14:10分到14:44各执行一次 | 0 10,44 14 ? 3 WED |
每月的第三个星期五上午10:15执行一次 | 0 15 10 ? * 6#3 |
每月的第三个星期五上午10:15执行一次 | 0 15 10 ? * FRI#3 |
每分钟的第10秒与第20秒都会执行 | 10,20 * * * * ? |
每月一日凌晨2点30执行一次 | 0 30 2 1 * ? |
更多推荐
浅谈:cron表达式
发布评论