2019-07-30 定时任务&编写规范

Linux运维学习 Day22

操作系统定时任务

一.系统定时任务概念

1. 时间信息有时不准   时间同步操作  每过10分钟    
2. 备份数据信息       凌晨          
   作用:代替人自动完成一些任务

二.系统定时任务实现方法:

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

实现定时任务配置
(1) 系统默认定时任务: 
      cron.hourly/  --- 每小时执行目录中脚本文件
      cron.daily/   --- 每天执行目录中脚本文件
      cron.weekly/  --- 每周执行目录中脚本文件
      cron.monthly/ --- 每月执行目录中脚本文件
    
    vim oldboy.sh
    #!/bin/bash
    echo "info_$(date +%F_%T)" >/tmp/test_cron.txt

(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

编写定时任务:
[root@oldboyedu ~]# 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

定时任务时间信息    执行任务信息
* * * * *           命令/脚本

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

任务信息: cp /etc/host /etc/hosts.bak

练习题及总结

  1. 凌晨2点半 将数据进行备份

    crontab -e
    30 2 * * *  cp /etc/host /etc/hosts.bak
    

如何验证定时任务功能:
(1) 实时监控定时任务日志信息
[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)

    ① 编写定时/定时任务触发  时间信息
    ② 主机名称信息
    ③ 读取什么定时任务文件信息
    ④ 定时任务完成了事情

(2) 加快定时任务执行

  调整时间信息
  PS: 调整时间尽量向后调整
  1. 下午3点40,8月6日,周日 将数据进行备份 错误?

     PS: 在设置时间信息时, 周信息不能和日期信息一起设置
    
    1. 每隔1个小时, 数据备份
      /n 每隔多久执行定时任务 间隔多久

      *    每分钟 每小时 每天 每月 每周
      0  */1 * * * cp /etc/hosts  /etc/hosts.01   正确 
      *  */1 * * * cp /etc/hosts  /etc/hosts.01   问题
      
      说明: 每隔一小时会执行
      1:00  ---  2:00  执行时间条件
      
      *     ---  每分钟执行
      
      PS: 在设置好一个时间信息, 前面的时间也要做规划
      
    2. 每天上午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点执行  
    
    1. 每天上午9 11 执行数据备份

      ,   非连续的时间范围
      0  9,11  * * *  cp /etc/hosts  /etc/hosts.01
      

    总结:时间表示形式

    *   每多少时间
    */n 每隔多久  间隔时间
    1-10 连续时间范围    
    1,10 非连续时间范围
    

四.定时任务编写常见问题

1. 每隔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
   
2. 规范化编写定时任务
   */5 * * * *  /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
   postfix 服务开启 --- /var/spool/mail/root         邮件 文件不断变大  占用更多block   
   postfix 服务关闭 --- /var/spool/postfix/maildrop/      大量小文件    占用更多inode
   /dev/null   --- 系统黑洞
   
3. 将/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
第三个里程: 放入定时任务中(绝对路径)    
第四个里程: 调整时间信息进行测试
第五个里程: 检查日志信息/检查任务执行结果  

测试环境测试定时任务没问题:
执行脚本将线上服务器定时任务做改动

compress.sh 
#!/bin/bash
tar xxxxx

#!/bin/bash 
echo "* * * * *  /sh/bin /server/scripts/compress.sh"  >>/var/spool/cron/root

你可能感兴趣的:(2019-07-30 定时任务&编写规范)