day24:定时任务(2)

主要内容:

定时任务实际备份案例
定时任务箴言(坑)

一、定时任务是备份案例:

1.每天晚上12点打包备份/etc目录到/tmp下
(1)命令行测试
[root@oldedu59 ~]# #命令行测试
[root@oldedu59 ~]# tar zcf /tmp/etc-$(date +%F).tar.gz /etc/ 
tar: Removing leading `/' from member names
[root@oldedu59 ~]# ll /tmp/etc-2019-04-28.tar.gz 
-rw-r--r-- 1 root root 10213180 Apr 28 09:53 /tmp/etc-2019-04-28.tar.gz
[root@oldedu59 /tmp]# tar xf /tmp/etc-2019-04-28.tar.gz
(2)书写脚本
▽root@oldedu59 ~]# #书写脚本
[root@oldedu59 ~]# mkdir -p /server/scripts 
[root@oldedu59 ~]# cat /server/scripts/bak-etc.sh
cat: /server/scripts/bak-etc.sh: No such file or directory
[root@oldedu59 ~]# vim /server/scripts/bak-etc.sh
#!/bin/bash
tar zcf /tmp/etc-$(date +%F).tar.gz /etc/
(3)测试脚本
[root@oldedu59 ~]# cat /server/scripts/bak-etc.sh
#!/bin/bash
tar zcf /tmp/etc-$(date +%F).tar.gz /etc/
[root@oldedu59 ~]# sh /server/scripts/bak-etc.sh
tar: Removing leading `/' from member names
[root@oldedu59 ~]# ll /tmp/etc-2019-04-28.tar.gz 
-rw-r--r-- 1 root root 10213180 Apr 28 09:57 /tmp/etc-2019-04-28.tar.gz
(4)写入任务;改为每分钟先检查
[root@oldedu59 ~]# #写入定时任务,改为每分钟进行检查
[root@oldedu59 ~]# crontab -e
#show time  by ylz  at 20190426
#*/2 * * * *  date  >>/tmp/time.log
#beifeng   by ylz  at 2019-4-28
* * * * *  sh /server/scripts/bak-etc.sh
[root@oldedu59 ~]# tail -f  /var/log/cron(看日志  /var/log/cron)
[root@oldedu59 ~]# ll  /tmp/etc-2019-04-28.tar.gz (看结果)
-rw-r--r-- 1 root root 5341184 Apr 28 10:22 /tmp/etc-2019-04-28.tar.gz
(5)写入定时任务
[root@oldedu59 ~]# crontab -e
#show time  by ylz  at 20190426
#*/2 * * * *  date  >>/tmp/time.log   2>&1
#beifeng   by ylz  at 2019-4-28
00 00 * * *  sh /server/scripts/bak-etc.sh   >/dev/null          2>&1   
[root@oldedu59 ~]# cat /var/log/cron
[root@oldedu59 ~]# ll  /tmp/etc-2019-04-28.tar.gz 
-rw-r--r-- 1 root root 5341184 Apr 28 10:22 /tmp/etc-2019-04-28.tar.gz
2.书写脚本排错

(1)先运行里面的命令
(2)sh -x:运行脚本时 显示脚本的执行过程

[root@oldboyedu59 ~]# sh -x /server/scripts/bak-etc.sh 
++ date +%F
+ tar zcf /tmp/etc-2019-04-28.tar.gz /etc/
tar: Removing leading `/' from member names

带加号的为脚本的执行过程
加好越多越优先执行

二、定时任务箴言(坑)

1.书写定时任务时一定要加上一个注释
2.在书写定时任务的时候尽量使用脚本
3.运行脚本时用sh
4.定时任务中%有特殊含义
5.在定时任务中命令和脚本尽量使用绝对路径
    用户的定时任务
        如果没有用绝对路径,则在用户的家目录
    系统的定时任务
        如果没有用绝对路径,则在跟下
6.在定时任务里面每个命令或脚本可以有两个选择:定向到空或追加到文件

(1)预备知识

/dev/null 黑洞
>/dev/null 2>/dev/null 正确的信息 错误的信息都定向到黑洞中
>/dev/null 2>&1 正确的信息 错误的信息都定向到黑洞中
&>/dev/null 正确的信息 错误的信息都定向到黑洞中

(2)写法

[root@oldedu59 ~]# crontab -e
#show time  by ylz  at 20190426
#* * * * *  date +\%F_\%w                  >>/tmp/time.log     2>&1
#beifeng   by ylz  at 2019-4-28
#* * * * *  sh /server/scripts/bak-etc.sh  >/dev/null          2>&1

(3)原因:如果不定向到空或追加到文件;定时任务会以邮件的形式把输出到屏幕的内容发给你
(4)故障案例:定时任务没有定向到空或者追加到文件的故障

系统邮件服务开启:
你就会不断收到邮件
You hava new mail in /var/spool/mail/root

系统邮件服务关闭(大部分情况):

把没有发送出去的邮件 临时放起来
/var/spool/postfix/maildrop (这个目录下面会有大量的小文件)
可以发现 邮件临时目录有大量小文件
日积月累会导致占用系统大量inode

7.定时任务运行脚本环境变量的问题

(1)原因:定时任务运行脚本时,PATH只认识/usr/bin/和/bin/的命令
(2)解决故障:

使用命令时使用绝对路径
在脚本的开头重新设置一下PATH(记录着命令的路径)
使用命令:. /etc/profile 或者source /etc/profile

错误展示:

(1)找到错误:

[root@oldboyedu59 ~]# vim /server/scripts/bak-etc.sh
#!/bin/bash
#tar zcf /tmp/etc-`date +%F`.tar.gz /etc/
date
ip a s eth0|awk -F"[/ ]+" 'NR==3{print $3}'
[root@oldboyedu59 ~]# sh  /server/scripts/bak-etc.sh
Sun Apr 28 15:28:05 CST 2019
10.0.0.200
[root@oldboyedu59 ~]# sh -x /server/scripts/bak-etc.sh
+ date
Sun Apr 28 15:28:14 CST 2019
+ ip a s eth0
+ awk '-F[/ ]+' 'NR==3{print $3}'
10.0.0.200
[root@oldboyedu59 ~]# crontab -e
#bak-etc  by  ylz  at 2019-4-28
#* * * * *  sh /server/scripts/bak-etc.sh  >>/tmp/etc.log   2>&1
* * * * *   sh  /server/scripts/bak-etc.sh  >>/tmp/ip.log   2>&1
crontab: installing new crontab
[root@oldboyedu59 ~]# crontab -l 
#bak-etc  by  ylz  at 2019-4-28
#* * * * *  sh /server/scripts/bak-etc.sh  >>/tmp/etc.log   2>&1
* * * * *   sh  /server/scripts/bak-etc.sh  >>/tmp/ip.log   2>&1
[root@oldboyedu59 ~]# tail -f /var/log/cron
Apr 28 15:31:01 oldboyedu59 CROND[8389]: (root) CMD (sh  /server/scripts/bak-etc.sh  >>/tmp/ip.log   2>&1)
Apr 28 15:32:01 oldboyedu59 CROND[8401]: (root) CMD (sh  /server/scripts/bak-etc.sh  >>/tmp/ip.log   2>&1)
[root@oldboyedu59 ~]# cat /tmp/ip.log 
Sun Apr 28 15:31:01 CST 2019
/server/scripts/bak-etc.sh: line 4: ip: command not found
[root@oldboyedu59 ~]# which ip date
/usr/sbin/ip
/usr/bin/date

(2)修改错误:

[root@oldboyedu59 ~]# vim /server/scripts/bak-etc.sh
#!/bin/bash
#tar zcf /tmp/etc-`date +%F`.tar.gz /etc/
source  /etc/profile
date
ip a s eth0|awk -F"[/ ]+" 'NR==3{print $3}'                  
[root@oldboyedu59 ~]# cat /tmp/ip.log 
Sun Apr 28 15:37:02 CST 2019
10.0.0.200
Sun Apr 28 15:38:01 CST 2019
10.0.0.200
[root@oldboyedu59 ~]# tail -f /var/log/cron
Apr 28 15:38:01 oldboyedu59 CROND[8459]: (root) CMD (sh  /server/scripts/bak-etc.sh  >>/tmp/ip.log   2>&1)
Apr 28 15:39:01 oldboyedu59 CROND[8484]: (root) CMD (sh  /server/scripts/bak-etc.sh  >>/tmp/ip.log   2>&1)

你可能感兴趣的:(day24:定时任务(2))