2019-07-day22

系统定时任务

01. 系统定时任务概念 == 生活中闹钟 代替人自动完成一些任务

作用:1.可以指定时间 进行备份数据
2. 可以指定时间 进行同步时间操作

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

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

    配置文件
    /var/spool/cron/root         --- root用户设置定时任务配置文件
    /var/spool/cron/oldboy     --- oldboy用户设置定时任务配置文件
    /var/log/cron                    --- 定时任务日志文件
  1. 定时任务如何进行配置
    systemctl status crond ----查看crond服务是否开启
    systemctl enable crond ---- 开机自动启动服务
    systemctl start crond ----开启ceond服务
    [root@www ~]# cat /etc/crontab
    SHELL=/bin/bash 环境变量此信息
    PATH=/sbin:/bin:/usr/sbin:/usr/bin 环境变量此信息
    MAILTO=root

0# For details see man 4 crontabs

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

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

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

任务信息:
cp /etc/host /etc/hosts.bak
练习:01. 凌晨2点半 将数据进行备份
crontab -e
30 2 * * * cp /etc/host /etc/hosts.bak
:wq
如何验证定时任务日志信息
[root@www ~]# tail -f /var/log/cron
Jul 30 16:50:18 www crontab[8214]: (root) REPLACE (root)
Jul 30 16:50:18 www crontab[8214]: (root) END EDIT (root)
01 02 03 04
1):编辑定时/定时任务触发 时间信息
2):主机名此信息
3):读取什么定时任务文件信息
4):定时任务完成的事情

02 加快定时任务执行
调整时间信息
PS:调整时间尽量向后调整
练习题:每隔1个小时, 数据备份
/n 每隔多久执行定时任务 间隔多久
* 每分钟 每小时 每天 每月 每周
0 */1 * * * cp /etc/hosts /etc/hosts.01 正确
* */1 * * * cp /etc/hosts /etc/hosts.01 问题
说明: 每隔一小时会执行
1:00 --- 2:00 执行时间条件
* --- 每分钟执行
PS: 在设置好一个时间信息, 前面的时间也要做规划
练习题:每天上午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点执行
练习题:每天上午9 11 执行数据备份
, 非连续的时间范围
0 9,11 * * * cp /etc/hosts /etc/hosts.01
时间表示形式:
* 每多少时间
*/n 每隔多久 间隔时间
1-10 连续时间范围
1,10 非连续时间范围

  1. 定时任务编写常见问题:

    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
                说明: 定时任务中有些特殊符号无法识别

    定时任务编写注意事项:

    1. 编写定时任务需要有注释信息 (时间 编写人员 任务作用)
    2. 编写定时任务注意环境变量 /usr/bin:/bin 命令书写为绝对路径
    3. 编写定时任务注意特殊符号 需要标记转义符号 \
    4. 编写定时任务需要将输出信息定义到空 &>/dev/null
    5. 编写定时任务建议使用脚本编写

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

    脚本编写定时任务:
    第一个里程: 编写脚本信息
    第二个里程: 测试脚本执行效果
    /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-day22)