day22--操作系统定时任务

系统定时任务实现方法:

1.定时任务软件:cronie
2.定时任务软件:atd          设置一次定时任务,只执行一次
3.定时任务软件:anacron      定时时间有固定设置   每小时   每天  每月

实现定时任务配置:
1.系统默认定时任务:
        cron.daily/      ---每天执行目录中脚本文件
        cron.daily/      ---每天执行目录中脚本文件
        cron.weekly/     ---每周执行目录中脚本文件
        cron.monthly/    ---每月执行目录中脚本文件

2.用户自定义设置定时任务
    一个命令  两个文件
    crontab        ---设置和查看定时任务命令
    crontab   -l   ---查看设置的定时任务
    crontab   -e   ---编辑设置定时任务/语法检查功能

    配置文件
    /var/spool/cron/root      ---root用户设置定时任务配置文件
    /var/spool/cron/oldboy    ---oldboy用户设置定时任务配置文件
    /var/log/cron             ---定时任务日志文件
定时任务如何进行配置
准备工作:
systemctl start crond
systemctl enable crond

/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
0 9,11 *  *  *
定时任务时间信息      执行任务信息(命令/脚本)

时间信息:
*(分) *(时) *(日) *(月) *(周)
分钟:0-59
小时:0-23
日期:1-31
月份:1-12
星期:0(周日)-6

  • 例子:
    任务信息:cp /etc/host /etc/hosts.bak
    cp /etc/host /etc/hosts.bak
  • 练习:
    01.凌晨2点半 将数据进行备份
    crontab -e
    30 2 * * * cp /etc/host /etc/hosts.bak

验证定时任务

 01. 实时监控定时任务日志信息
        [root@oldboyedu ~] tail -f /var/log/cron
        Jul 30 16:56:25 oldboyedu crontab[42580]: (root) BEGIN EDIT (root)
        Jul 30 16:56:38 oldboyedu crontab[42580]: (root) REPLACE (root)
        Jul 30 16:56:38 oldboyedu crontab[42580]: (root) END EDIT (root)
             01            02        03                04
        Aug  1 02:30:01 oldboyedu CROND[42950]:   (root) CMD (cp /etc/host /etc/hosts.bak)

  1):编写定时任务时间/出发定时任务时间
  2):主机名称信息
  3):读取定时任务文件信息
  4):定时任务完成时间

   02. 加快定时任务执行
   调整时间信息
   PS: 调整时间尽量向后调整
  • 练习02.下午3点40,8月6日,周日 将数据进行备份(错误案例)
40 15 6 8 0
PS: 在设置时间信息时, 周信息不能和日期信息一起设置
  • 练习03. 每隔1个小时, 数据备份
/n   每隔多久执行定时任务            间隔多久
        *    每分钟 每小时 每天 每月 每周
        0  */1 * * * cp /etc/hosts  /etc/hosts.01   正确 
        *  */1 * * * cp /etc/hosts  /etc/hosts.01   问题

        说明: 每隔一小时会执行
        1:00  ---  2:00  执行时间条件
        *     ---  每分钟执行

        PS: 在设置好一个时间信息, 前面的时间也要做规划
  • 练习04. 每天上午9,10,11,12点 执行数据备份
 -   连续的时间范围  
        0 9-12 * * * cp /etc/hosts  /etc/hosts.01      规范配置
        0 9-12/1 * * *  cp /etc/hosts  /etc/hosts.01   理论正确
        间隔1小时执行 9-10  and  9-12点执行  
    
    
  • 练习05. 每天上午9 11 执行数据备份

        ,   非连续的时间范围
        0  9,11  * * *  cp /etc/hosts  /etc/hosts.01
        
      时间表示形式:
      *   每多少时间
      */n 每隔多久  间隔时间
      1-10 连续时间范围      
      1,10 非连续时间范围
定时任务编写常见问题:
  • 每隔5分钟, 进行时间同步(ntpdate ntp1.aliyun.com)
如何编写定时任务:
       方法一: 采用绝对路径进行编写
       */5 * * * *  /usr/sbin/ntpdate ntp1.aliyun.com

       方法二: 放入到脚本文件中
       #!/bin/bash
       PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/oldboy:/oldgirl:/root/bin
       echo $PATH &>/tmp/oldboy.txt
       ntpdate ntp1.aliyun.com

       说明: 定时任务执行时, 识别的环境变量只有/usr/bin:/bin

       
  • 规范化编写定时任务
       */5 * * * *  /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
       postfix 服务开启 --- /var/spool/mail/root         邮件 文件不断变大  占用更多block   
       postfix 服务关闭 --- /var/spool/postfix/maildrop/      大量小文件    占用更多inode
       /dev/null   --- 系统黑洞
  • 将/etc/hosts 打包备份 /opt/hosts_时间信息.tar.gz 每分钟操作
       tar zcvf  /opt/hosts_$(date +%F).tar.gz   /etc/hosts
       tar zcvf  /opt/hosts_`date +%F`.tar.gz   /etc/hosts

       解决方式一: 将特殊符号前面加上转义符号
       * * * * * tar zcvf  /opt/hosts_$(date +\%F).tar.gz   /etc/hosts

       解决方式二: 将有特殊符号命令放入脚本中
       #!/bin/bash 
       tar zcvf  /opt/hosts_$(date +%F).tar.gz 
       * * * * * sh /server/scripts/tar.sh &>/dev/null

       说明: 定时任务中有些特殊符号无法识别
  • 定时任务编写注意事项:
    01. 编写定时任务需要有注释信息         (时间 编写人员 任务作用)
    02. 编写定时任务注意环境变量           /usr/bin:/bin   命令书写为绝对路径
    03. 编写定时任务注意特殊符号           需要标记转义符号 \
    04. 编写定时任务需要将输出信息定义到空 &>/dev/null  
    05. 编写定时任务建议使用脚本编写

  • 编写定时任务规范
命令编写定时任务:
    第一个里程: 测试命令是否可以在命令行执行   
    第二个里程: 放入定时任务中(绝对路径)
    第三个里程: 调整时间信息进行测试
    第四个里程: 检查日志信息/检查任务执行结果

脚本编写定时任务:
    第一个里程: 编写脚本信息
    第二个里程: 测试脚本执行效果
    /bin/sh /server/scripts/test.sh
    第三个里程: 放入定时任务中(绝对路径)    
    第四个里程: 调整时间信息进行测试
    第五个里程: 检查日志信息/检查任务执行结果  
    
    测试环境测试定时任务没问题:
    执行脚本将线上服务器定时任务做改动

你可能感兴趣的:(day22--操作系统定时任务)