zoukankan      html  css  js  c++  java
  • day19-Linux 定时任务

    第一章 定时任务介绍

    1.什么是定时任务

    定时执行命令或脚本

    2.为什么需要定时任务

    每天备份数据

    定时同步时间

    每天巡检

    whereis
    1.这个命令可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广。

    2.可以看到,whereis不仅找到了 crontab 可执行文件的位置,还找到了其 man 帮助文件,可见其搜索范围比较广,不局限于PATH。

    whereis 查询crontab 命令详情

    [root@centos7-100 ~]# whereis crontab
    crontab: /usr/bin/crontab /etc/crontab /usr/share/man/man1/crontab.1.gz /usr/share/man/man5/crontab.5.gz
    [root@centos7-100 ~]# cat /etc/crontab 
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    

    which查询crontab 详情

    [root@centos7-100 ~]# which crontab
    /usr/bin/crontab
    
    

    第二章 定时任务实践说明

    1.定时任务配置文件说明

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    

    2.定时任务语法详解

    5星口诀:分 时 日 月 周

       *     *     *    *    *              user        command
      分钟  小时    天   月份  星期           执行用户        执行命令
    

    间隔符号:

    *          星号表示任意,最小单位,每分/每小时/每周/每月
    -          表示一个时间段范围,例如8-10点
    ,          表示分割,表示每当,如果日期举例:2,4,6表示每月的2号4号6号
    /          表示每隔多久,如果是小时,*/2 表示每隔2小时
    

    第三章 定时任务时间表达练习

    *  *  *  *   *   表示每分钟都执行
    00  00  *  *   * 每天0点执行
    30  01  *  *  * 每天凌晨1点30分执行
    00  *  *  *  * 每小时整执行
    *  */2  *  *   * 每隔2小时执行
    */30  *   *   *  * 每隔30分钟执行
    00   01  15  *  * 每个月的15号01点执行
    00   05   01-14   *   * 每个月1-14号凌晨5点执行
    */10   06-08   */5   *   * 每隔5天的上午6点到8点之间每隔10分钟执行一次
    00   08-15/2   *   *   *白天08-15点之间,每隔2小时执行
    00   23   *   *   01-03 周一到周三每天晚上11点执行
    

    第四章 定时任务配置管理

    1.命令格式

    crontab [options]

    2.常用参数

    -e #编辑定时任务

    -l #查看定时任务

    -r #删除定时任务

    -u #指定其他用户的定时任务

    3.小试身手

    第一步:编辑定时任务,操作命令和vim一样的

    crontab -e

    第二步:查看定时任务

    crontab -l

    第五章 定时任务实战练习

    练习1:每分钟输出时间到/tmp/time.log 日志里

    *  *  *  *  * date >>/tmp/time.log
    

    练习2:每周日执行一次删除/var/log/nginx/ 目录下7天以前日志的任务

    [root@centos7-100 tmp]# crontab -l
    * * * * * date >>/tmp/time.log
    00  00  *  *  7 find /var/log/nginx -type f -mtime +7 |xargs rm -rf
    

    练习3:备份任务

    需求如下:

    1.每天凌晨1点备份一次/var/log目录到/backup目录下

    00  01  *  *  * mkdir /backup  -p && tar zcvf /backup/log.tar.gz /var/log
    

    2.备份格式为2021-11-07_hostname_log.tar.gz

    00 01 * * *
    mkdir /backup  -p
    tar zcvf /backup/$(date +%F)_$(hostname)_log.tar.gz  /var/log
    
    合并写成一条
    00 01 * * * mkdir /backup  -p && tar zcvf /backup/$(date +%F)_$(hostname)_log.tar.gz  /var/log
    

    3.将执行的结果保存到日志里/tmp/backup.log

     00 01 * * * mkdir /backup  -p && tar zcvf /backup/$(date +%F)_$(hostname)_log.tar.gz  /var/log 
    

    4.要求备份文件只保留3天,多余删掉

    find /backup/ -type f  -name "*_log.tar.gz" -mtime +3 |xargs rm -rf
    

    5.将命令写进脚本里并赋予执行权限

    1.创建backup.sh 文件

    touch /opt/backup.sh 
    vim /opt/backup.sh
    
    

    2.创建备份目录

    mkdir /backup -p
    

    3.备份日志

    tar zcvf /backup/$(date +%F)_$(hostname)_log.tar.gz  /var/log 
    

    4.删除多余的压缩包

    find /backup/ -type f  -name "*_log.tar.gz" -mtime +3 |xargs rm -rf
    

    5.增加文件执行权限

    chmod +x /opt/backup.sh   #chmod +x 和chmod a+x 效果一样
    

    6.编写定时任务

    00 01 * * * /bin/bash /opt/backup.sh >> /tmp/backup.log 2>&1
    

    第六章 定时任务调试

    1.工作中定时任务的坑
    坑1:没打日志,不知道定时任务有没有执行

    正确姿势:
    定时任务执行过程最好输出到日志里,这样有助于排查问题,如果不需要输出,可以定向到/dev/null。
    定时任务不需要输出到屏幕上。

    坑2:命令行可以执行,但是放进定时任务里执行不成功
    正确姿势:
    定时任务可识别的PATH变量有限,最佳实践是将要执行的命令放进脚本里,然后定时任务执行这个脚本。
    还有一点需要注意的就是,定时任务要执行的命令,最好使用绝对路径,这样就不会因为PATH变量不全导致执行不了命令了。

    坑3:时间久了,不知道这条定时任务是干嘛的了
    定时任务一定要加注释,不然容易被人打

    2.调试定时任务的思路
    1.先把定时任务的命令在命令终端执行测试好,确定没问题之后再写进定时任务里
    2.调试的时候可以将执行过程详细的输出到日志里,方便排查问题
    3.定时任务执行的命令使用绝对路径
    4.如果是执行的脚本,最好加上可执行权限
    5.调试的阶段可以缩短定时任务执行的间隔,方便测试出结果
    6.最后别忘了给定时任务添加注释。方便自己,也方便他人阅读

  • 相关阅读:
    人生,别认输,因为没人希望你赢
    一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    Android Studio 出现 Gradle's dependency cache may be corrupt 解决方案
    清华梦的粉碎——转自王垠
    label smooth
    <现代C++实战30讲>笔记 01 | 堆、栈、RAII:C++里该如何管理资源?
    h5转pb的两个坑
    opencv库的像素x,y,width,height,col,row的对应关系
    detect 导图
    keras多gpu训练
  • 原文地址:https://www.cnblogs.com/zhaocheng690/p/15430352.html
Copyright © 2011-2022 走看看