小知识:如何判定crontab任务的执行频度

所有运维人员都知道crontab定时任务的基本格式如下:

*   *   *   *   *   command
分  时  日  月   周    命令或脚本

如果是写了具体的时间,基本大家都可以清楚的根据这样的规则去匹配对应:

第1个*表示分钟,取值范围:0~59;
第2个*表示小时,取值范围:0~23;
第3个*表示日期,取值范围:1~31;
第4个*表示月份,取值范围:1~12;
第5个*表示星期,取值范围:0~6;
第6个command则表示具体要运行的命令或脚本。

今天客户咨询一个小问题,某生产环境的两条定时任务是:

* * * * * command1
*/10 * * * * command2

那这里的第一条和第二条分别代表怎样的执行频度呢?
实际上第一条代表每分钟执行一次,第二条代表每10分钟执行一次。
既然每10分钟是*/10 * * * *为啥每分钟不是*/1 * * * *呢?实际上也是可以用*/1 * * * *表示每分钟的,只不过也可以简写为* * * * *,意思是一样的。

其实这种问题最简单的确认就是实际测试下:

[oracle@jystdrac2 ~]$ crontab -l
#0 12 * * * /bin/sh /home/oracle/baby/backup_exp_t_baby.sh
* * * * * date >> /tmp/date1.log
*/10 * * * * date >> /tmp/date10.log
*/1 * * * * date >> /tmp/date3.log

然后根据日志就可以清晰的判断具体的执行频度:

[oracle@jystdrac2 ~]$ tail -10 /tmp/date1.log 
Tue Jul 28 05:32:01 CST 2020
Tue Jul 28 05:33:01 CST 2020
Tue Jul 28 05:34:01 CST 2020
Tue Jul 28 05:35:01 CST 2020
Tue Jul 28 05:36:01 CST 2020
Tue Jul 28 05:37:01 CST 2020
Tue Jul 28 05:38:01 CST 2020
Tue Jul 28 05:39:02 CST 2020
Tue Jul 28 05:40:01 CST 2020
Tue Jul 28 05:41:01 CST 2020
[oracle@jystdrac2 ~]$ tail -10 /tmp/date10.log 
Tue Jul 28 05:20:01 CST 2020
Tue Jul 28 05:30:01 CST 2020
Tue Jul 28 05:40:01 CST 2020
[oracle@jystdrac2 ~]$ tail -10 /tmp/date3.log 
Tue Jul 28 05:33:01 CST 2020
Tue Jul 28 05:34:01 CST 2020
Tue Jul 28 05:35:01 CST 2020
Tue Jul 28 05:36:01 CST 2020
Tue Jul 28 05:37:01 CST 2020
Tue Jul 28 05:38:01 CST 2020
Tue Jul 28 05:39:02 CST 2020
Tue Jul 28 05:40:01 CST 2020
Tue Jul 28 05:41:01 CST 2020
Tue Jul 28 05:42:01 CST 2020
[oracle@jystdrac2 ~]$ 
This entry was posted in Linux and tagged . Bookmark the permalink.