所有运维人员都知道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 ~]$