Linux定时任务

05. 定时任务概念(第一个服务)
    作用: 
    1) 类似生活中闹钟
       Alarmy  叫醒方式
       01 关闭方式: 做算数题 2位数 乘法运算  
       02 关闭方式: 运动关闭 摇手机 5次
       03 关闭方式: 拍照关闭 找个地方拍照 
    2) 可以自动完成操作命令
       夜里备份数据(访问量不大)  白天(访问量也少-游戏)
       cp /data  /backup
       自动清理磁盘
       自动的进行时间同步更新 ntpdate xxx

    软件种类:
    cronie   实现定时任务功能*****
    atd      实现定时任务功能 只能一次设置定时功能 
    anacron  实现定时任务功能 应用在家用电脑  7*24服务器
    
    检查软件是否安装 cronie
    [root@oldboyedu ~]# rpm -qa cronie
    cronie-1.4.11-19.el7.x86_64
    
    [root@oldboyedu ~]# rpm -ql cronie
    /etc/cron.deny
    /bin/crontab
    
    rpm -ivh 软件包.rpm   --- 手动安装软件
    -i install 安装
    -v         显示过程信息
    -h human   以人类可读方式显示信息
    说明: 无法解决软件依赖关系
    
    补充说明: 如何让linux和windows主机之间传输数据
    yum install -y lrzsz
    在linux上进行操作
    rz -y               从windows上下载重要数据信息
    sz -y 数据信息      从linux上上传重要数据到windows
    
    定时任务实现方法:
    日志文件需要定期进行切割处理
    周一         secure   100M
    周二(00:00)  mv secure secure-`date +%F`  100M 切割后的文件
                 touch secure
    系统特殊目录:
    系统定时任务周期:每小时   控制定时任务目录:/etc/cron.hourly
    系统定时任务周期:每一天   控制定时任务目录:/etc/cron.daily   00:00-23:59
    系统定时任务周期:每一周   控制定时任务目录:/etc/cron.weekly  7天
    系统定时任务周期:每个月   控制定时任务目录:/etc/cron.monthly 30 28 31
    
    
    用户定时任务
    每天的02:30进行数据备份???
    a 用户定时任务查看   crontab -l(list)
    说明: 列表查看定时任务信息(cron table)

    b 用户定时任务编辑   crontab -e(edit)
    说明: 编辑配置定时任务信息

    crontab -e  编写定时任务     vi /var/spool/cron/        定时任务配置文件保存目录
                                     /var/spool/cron/root    root用户设置的定时任务配置文件
                                     /var/spool/cron/oldboy  oldboy用户设置的定时任务配置文件
    visudo      对普通用户提权   vi /etc/sudoers 

06. 定时任务实际编写方法
    a 定时任务服务环境准备  
      定时任务服务是否启动/是否开机自动启动    
      [root@oldboyedu ~]# systemctl status crond
      ● crond.service - Command Scheduler
         Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
         Active: active (running) since Tue 2019-04-23 09:15:43 CST; 2 days ago
       Main PID: 905 (crond)
         CGroup: /system.slice/crond.service
                 └─905 /usr/sbin/crond -n
      
      Apr 23 09:15:43 oldboyedu.com systemd[1]: Started Command Scheduler.
      Apr 23 09:15:43 oldboyedu.com systemd[1]: Starting Command Scheduler...
      Apr 23 09:15:43 oldboyedu.com crond[905]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 30% if used.)
      Apr 23 09:15:43 oldboyedu.com crond[905]: (CRON) INFO (running with inotify support)

    b 实际编写定时任务
      配置方法: crontab -e
      编写语法规范:
      # 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
      
      *   *   *    *   * 具体做什么事情
      分  时  日  月  周
      
      写法:
      01. 用数值表示时间信息
          00 02 *  *  *   备份文件
      02. 利用特殊符号表示时间信息
          *      *      *     *     *   备份文件 
        每分钟  每小时 每天  每月  每周
          PS: 定时任务最短执行的周期为每分钟
          */5     */5    */5    
        每隔5分钟  每隔5小时    
          01-05   02    *    *    *        
         01到05   02    *    *    *
        指定时间的范围
          00      14,20  *   *    *
        指定不连续的时间信息
        
       测验01: 每天下午02:30分钟 起来学习
               30 14 * * *
       测验02: 每隔3天 夜里2点   执行数据备份
               00 02 */3  *  * 
       测验03: */10  01,03  *  *   *   ??? 
               01点 每隔10分钟 
               03点 每隔10分钟  
               每天   凌晨1点和凌晨3点  每隔10分钟0点整 -->  01:00 03:00       
       测验04: */10   01-03  *  *   *
       测验05: *      01,03  *  *   *   ???   
       测验06: *      01-03     *  *   *   
       测验07: 00     02     28 */2 6     ???   
               02:00  28 每隔两个月  星期6
       结论: 
       01. 在写时间信息的时候, 如果想表示每隔多久执行什么任务
           /上面尽量用*号表示, 不要写具体数值
       02. 时间信息由左到右依次书写, 尽量不要跳步
       03. 当编写定时任务时,日期信息不要和星期信息同时出现
    
       补充说明:
       20/10  01,03 * * *  
       01:20 01:30 01:40       01:59
       03:00        03:59
    
    c 实际编写定时任务
      1) 每天凌晨两点备份 /data目录到 /backup
      第一个历程: 写上时间信息
      00 02 * * *
      第二个历程: 写上完成任务的具体命令
      cp -a /data /backup
      第三个历程: 编写定时任务
      crontab -e 
      00 02 * * *  cp -a /data /backup      
    
      定时任务排查方法:
      01. 检查是否有定时任务配置文件
      cat /var/spool/cron/root 
      00 02 * * *  cp -a /data /backup
      02. 检查定时任务日志文件
      ll /var/log/cron
      -rw-------. 1 root root 14050 Apr 25 15:49 /var/log/cron
      日志信息说明
      Apr 25 15:53:22 oldboyedu crontab[3893]: (root) BEGIN EDIT (root)
      Apr 25 15:54:06 oldboyedu crontab[3934]: (oldboy) BEGIN EDIT (oldboy)
      Apr 25 15:54:48 oldboyedu crontab[3893]: (root) REPLACE (root)
      Apr 25 15:54:48 oldboyedu crontab[3893]: (root) END EDIT (root)
      Apr 25 15:55:01 oldboyedu crond[905]: (root) RELOAD (/var/spool/cron/root)
      Apr 25 15:55:01 oldboyedu CROND[3939]: (root) CMD (cp -a /data /backup)
      Apr 25 15:55:01 oldboyedu CROND[3937]: (root) MAIL (mailed 55 bytes of output but got status 0x004b#012)
        执行时间      主机名   编辑定时任务    以什么用户编辑或执行定时任务/干了什么事情
                                执行定时任务
      
    
07. 定时任务编写注意事项:(规范)
    1) 编写定时任务要有注释说明
    2) 编写定时任务路径信息尽量使用绝对路径
    3) 编写定时任务命令需要采用绝对路径执行 /usr/sbin/useradd
       命令执行成功条件:
       useradd  ---> $PATH ---> /sbin/useradd ---> 命令执行成功
       定时任务执行时,识别的PATH信息只有: /usr/bin:/bin
       useradd命令--->usr/sbin/useradd
    4) 编写定时任务时,可以将输出到屏幕上的信息保存到黑洞中,避免占用磁盘空间
       * * * * *  sh test.sh &>/dev/null
       
       说明: 定时任务中执行命令,如果产生输出到屏幕的信息,都会以邮件方式告知用户
       /var/spool/mail/root          不断变大占用磁盘空间        占用的block空间
       解决方法: 将邮件服务关闭
       systemctl stop postfix
       
       /var/spool/postfix/maildrop/  不断产生小文件占用磁盘空间  占用的inode空间
       解决方法: 删除小文件
       rm -f /var/spool/postfix/maildrop/*
       systemctl start postfix
    5) 编写定时任务, 尽量不要产生屏幕输出信息
       cp -a /data /backup    
       tar zcvf /backup/data.tar.gz  /data    有信息输出
       cd / 
       tar zcf /backup/data.tar.gz  ./data    没有信息输出
    6) 当需要多个命令完成一个定时任务需求时,可以利用脚本编写定时
       vim backup.sh 
       cp -a /data /backup    
       tar zcvf /backup/data.tar.gz  /data
       
       crontab -e 
       # xxxxx
       * * * * *  /bin/sh /server/scripts/backup.sh &>/dev/null
定时任务
原文地址:https://www.cnblogs.com/linux985/p/13304201.html