万万没想到,小小的crontab研究了一个小时才研究明白,有一些很小的知识点,很简单,但是网上说的人不多,也不清楚,在此记录一下。
1. 两种cron的区别
Linux下的cron语法和Java spring中的并不完全相同。惊不惊喜,意不意外?
区别不大,主要是Java版本比Linux增加了一些特性,对比如下。
Linux | Java spring | |
---|---|---|
长度 | 5位或6位 | 6位或7位 |
具体格式 | ||
有无? L W等特殊字符 | 无 | 有 |
2. 特殊字符的用法
1. ?的用法
"?"字符仅被用于day of month和day of week两个子表达式,表示不指定值
当两个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为?
2. /的用法
“/”字符用来指定数值的增量
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”的含义一样)
3. optional的year怎么写
少填写一位时,自动补充*
4. L的用法
“L” 字符仅被用于day of month和day of week两个子表达式,它是单词“last”的缩写
但是它在两个子表达式里的含义是不同的。
在day of month子表达式中,“L”表示一个月的最后一天,无需手动处理不同月份最后一天日期不同的问题
在day of week子表达式中,“L”表示一个星期的最后一天,也就是SAT
5. W的用法
表示有效工作日(周一到周五),只能出现在Day of Month,系统将在离指定日期的最近的有效工作日触发事件。
例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日4日(周五)触发。
如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。
另外一点,W的最近寻找不会跨过月份。