crontab定时任务

程斌 2019-09-03 PM 4290℃ 2条

WX20190903-165225@2x.png

在工作开发中,时常会碰到这样子的需求:

  • apache服务器运行一段时间之后,需要重启;
  • 某个业务,要在每天凌晨检查会员是否过期,更新会员状态;
  • 报表数据的生成,定在每天凌晨3点,访问量比较小的时候操作;

以上的业务功能,一般首选的是crontab定时任务 + 业务脚本来完成。

注意点

  • 不做特殊处理,linux crontab 默认只能处理到分钟级别;
  • crontab用户级别系统级别 的;crontab -e、crontab -l是操作用户级别的;系统级别操作vim /etc/crontab
  • 系统级 crontab 编辑会对所有的用户都有影响;

详解

一个完整的crontab的命令行,包括6段,*号为其默认的占位符,每段以空格分开。
6个*号:* * * * * * 分别表示:

  • 第1列分钟0~59
  • 第2列小时0~23(0表示子夜)
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~7(0和7表示星期天)
  • 第6列要运行的命令

符号

  • 空格 语法分段
  • , 理解为逻辑
  • - 区间
  • / 理解为,如每分钟、每小时 ...

案例练习

  • 每天23:00重启apache
    00 */23 * * * /usr/bin/apache restart
  • 每小时检测有没有会员过期(每60分钟)
    */60 * * * * myCommand
  • 每个整点小时执行
    00 */1 * * * myCommand
  • 每月1号凌晨1点,执行导月报脚本
    00 1 * */1 * myCommand
  • 每周星期1凌晨1点,执行导周报脚本
    00 1 * * */1 myCommand
  • 每分钟检测某个服务是否存在
    * * * * * myCommand (默认是每分钟)
  • 每周6,日发送值班推送
    * * * * 0,6 myCommand

容易错

  • 错误的每隔一小时执行一次,事实上每分钟执行一次(因为分钟要求的是每分钟执行,而小时却要求每一个小时执行,这2个分明是冲突的时间策略。最终以分钟为准,所以它是每分钟执行一次。)
    * */1 * * * myCommand
  • 错误的每小时执行一次,事实是每个整点小时执行
    00 */1 * * * myCommand

crontab踩过的坑

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~



已有 2 条评论


  1. 正朝
    正朝
    Notice: Undefined variable: group in /home/wwwroot/www.chengbin.name/usr/themes/echo/comments.php on line 34

    你在腾讯?

    回复 2019-10-26 17:32
    1. 红酒花生
      红酒花生 博主

      没有,在长沙的一家公司。

      回复 2019-11-07 19:28