折腾:
【已解决】Ubuntu中crontab的脚本任务没有执行
后,慢慢真正明白cron的语法了。
所以去举例说明cron的参数的含义,计算出准确的命令运行的时间。
以之前写的一个cron的语法去举例和分析:
0 4 1 */2 *
对照语法:
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) # | | | | | # * * * * * command to be executed
容易分析出:
- 0 4:
- 0:0分钟
- 4:4分钟
- -》具体时间是 04:00:00
- 1:天,每月的1号
- */2:
- *表示所有月份都可以
- */2表示:每2个月间隔
- 所以共12个月份中,就是:2/4/6/8/12这几个月
- *:*表示周几都可以
-》综合起来就是:
注意现在的时间是:2019-11-09 00:37:00
- 先说年:没限制
- 再说月份:只允许2、4、6、8、10、12
- 所以往后最近的一次,则是12月
- 再说天:1号,对应月份的1号
- 再说小时:4点 04点 凌晨4点
- 以及分钟:00分钟
- 秒:默认是00
所以是:
从
2019-11-09 00:37:00
最近往后的一次,只能是:
2019年
的2、4、6、8、10、12中的12月
的1号
的凌晨4点
的0分钟
的0秒
合并起来是:
2019-12-01 04:00:00
后续的时间,就容易理解了
第二次就是:
2个月后的
2020-02-01 04:00:00
如此往后,即可推算出对应的时间,也就是:
帮忙算出来的时间:
引申解释:
之前不小心,把:
0 4 1 */2 *
写成了:
0 4 1 */2 0
则实际上,含义则完全变化了:
前面的部分都一样:
- 0 4:
- 0:0分钟
- 4:4分钟
- -》具体时间是 04:00:00
- 1:天,每月的1号
- */2:
- *表示所有月份都可以
- */2表示:每2个月间隔
- 所以共12个月份中,就是:2/4/6/8/12这几个月
只有最后的表示星期的,不是*,而是0,表示周日:
- 0:0表示周日
- -》注意是 只能是周日,周1到周六,都不行
- 注:0或7都表示周日
则含义则变成:
从
2019-11-09 00:37:00
最近往后的一次,只能是:
- 年:2019年
- 以及之后的年份,比如2020,2021,2022等
- 注意:之所以没说一定是2019年,因为要满足必须是星期日的条件
- 月:的2、4、6、8、10、12中的某个月份
- 注意:之所以没说是12月,因为要满足必须是星期日的条件
- 日:(肯定,必须是)1号
- 小时:凌晨4点
- 分钟:0分钟
- 秒:0秒
-》看到重点了吧
之后的一次,是某年某月(2、4、6、8、10、12中之一)的1号,必须是周日才行
去翻日历
很巧的是:
2019-12-01
就是周日
所以第一次的时间是:
2019-12-01 04:00:00
但是重点来了:
继续向后找,最近的日期,也是周日,同时还满足上面的条件的,则只有:
2021-08-01
所以,才看到
帮我们计算出来的时间分布是:
1. 2019-12-01 04:00:00 2. 2021-08-01 04:00:00 3. 2023-10-01 04:00:00 4. 2024-12-01 04:00:00
对应日期,都(正好是,必须是)周日
由此可见:
上面的规则和条件,要全部满足你所写的内容
反之:要自己确保很清楚自己写的条件,才能计算出正确的命令运行的时间
如果不清楚,则最好去参考
去帮你计算清楚。
转载请注明:在路上 » 【整理】如何读懂cron的值的真正含义即计算出命令执行的具体时间