首页 > 技术文章 > 迷惑性很强的crontab

young233 2019-11-03 11:39 原文

 

提到定时任务,我们通常会想起linux的crontab,可以说服务器端大部分定时任务都是由它完成的。这东西固然耗用,但是坑也不少。

 

这不,昨天我在部署一个备份任务的时候,就不幸踩坑了。差点酿成大祸。

 

首先,介绍一下crontab的特点:

  1. 此命令为系统自带命令,可通过crontab + 选项直接调用。相当于修改/var/spool/cron/usename文件。
    常用选项如下:

    选项 含义
    -e 编辑该用户下的crontab配置
    -r 删除该用户下的crontab配置
    -l 浏览该用户下的crontab配置

     

  2. 此命令非特权命令,任何用户可以调用。如下:

    [root@master cron]# whereis crontab
    crontab: /usr/bin/crontab /etc/crontab /usr/share/man/man1/crontab.1.gz /usr/share/man/man1p/crontab.1p.gz /usr/share/man/man5/crontab.5.gz
    

     

  3. 此命令有服务,可以通过crond来启动、停止、查看状态。

 

其次,介绍一下crontab的用法:

crontab包含六个参数,前五个是指定时间的,最后一个是命令参数,指定执行什么命令或脚本。

前五个参数分别是:

分: 取值0-59,*代表每分钟执行一次

时: 取值0-23,*代表每小时执行一次

日: 取值1-31,*代表每天执行一次

月: 取值1-12,*代表每月执行一次

周: 取值0-7,*代表每周执行一次

命令:执行命令或脚本即可。如sh xxx.sh, py xxx.py等。

例如,我们可以如此添加crontab命令。

 

* * * * * /bin/sh test.sh  #每分钟执行test.sh
0 */60 * * * /bin/sh test.sh #每小时0分执行test.sh
* */1 * * * /bin/sh test.sh  #每小时执行test.sh???

 

然而,上面说的都不是本文重点,重点在下面!!!

如果时间参数前后冲突,它会怎么办?

我上面的图里边,有一个每小时执行test.sh的定时,我加了问号,这就是我昨天踩的坑。

按照网上一些教程的说法,这句被理解成:

"每隔一个小时的特定分钟执行一次"

但是实际上执行的效果为:

每分钟执行一次

后来一分析,发现

* */1 * * * /bin/sh test.sh

这样的写法,系统会理解为,每隔一个小时的每分钟执行一次test.sh。

说白了,每分钟执行一次。

那肯定

推荐阅读