码迷,mamicode.com
首页 > 其他好文 > 详细

迷惑性很强的crontab

时间:2019-11-03 12:46:00      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:配置   pre   这就是我   导致   text   linu   enter   服务器端   crontab   

?

提到定时任务,我们通常会想起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。

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

那肯定??啦!

这问题导致备份任务占用过多CPU,系统差点死掉。

?

后经过恢复,将第一个"*"换成具体时间,问题解除。

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

经验总结:

  1. 最好指定具体的时间点来做定时任务。
  2. 越小的时间单位,越要精确。如果前后均为"*",时间会冲突。系统会执行小时间的配置,忽略大时间的配置。

几个常用的命令:

  1. 每分钟执行一次

    * * * * * /bin/sh test.sh
  2. 每n小时定时整点执行一次

    0 */n * * * /bin/sh test.sh
  3. 每隔60分钟执行一次

    */60 * * * * /bin/sh test.sh
  4. 每10天执行一次

    0 0 */10 * * /bin/sh test.sh
  5. 每年执行一次

    0 0 1 1 * /bin/bash

迷惑性很强的crontab

标签:配置   pre   这就是我   导致   text   linu   enter   服务器端   crontab   

原文地址:https://www.cnblogs.com/young233/p/11785546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!