Day 24 定时任务及练习题
第1章 定时任务与脚本练习题
1.1 每天晚上12点打包备份/etc目录到/tmp下 脚本
命令行使用命令
[root@oldboyedu50-lnb ~]# tar zcf /tmp/etc-`date +%F`.tar.gz /etc/
tar: Removing leading `/' from member names
[root@oldboyedu50-lnb ~]# ll /tmp/etc-2018-08-0*
-rw-r--r-- 1 root root 9734087 Aug 6 09:19 /tmp/etc-2018-08-06.tar.gz
写入脚本
[root@oldboyedu50-lnb ~]# vim /server/scripts/bak-etc.sh
tar zcf /tmp/etc-`date +%F`.tar.gz /etc/
测试脚本
[root@oldboyedu50-lnb ~]# sh /server/scripts/bak-etc.sh
tar: Removing leading `/' from member names
查看结果
[root@oldboyedu50-lnb ~]# ll /tmp/
-rw-r--r-- 1 root root 9734062 Aug 9 09:41 etc-2018-08-09.tar.gz
书写定时任务(先写入每分钟执行查看/var/spool/cron/root日志是否执行)
[root@oldboy50-lnb ~]#crontab -e
bak etc xuzhen at 2018.8.9
* * * * * /bin/sh /server/scripts/bak-etc.sh
最后根据题目要求修改时间
[root@oldboy50-lnb ~]#crontab -e
backup etc oldboy at 2018xxxxxx
00 00 * * * /bin/sh /server/scripts/bak-etc.sh
1.2 定时任务中命令或脚本结果(正确或错误)定向到黑洞>(/dev/null)或追加到指定文件中>>
[root@oldboy50-lnb ~]#crontab -l
#print name 许震 at 2018.8.8
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
#print name xuzhen at 2018.8.8
#00 00 * * * tar zcf /tmp/etc`date +\%F_\%T`.tar.gz /etc/ >/dev/null 2>&1
#00 */2 * * * tar zcf /bakup/etc.xiao`date +\%F_\%T`.tar.gz /etc/rc.local /etc/hosts /etc/fstab /etc/sysconfig >/dev/null 2>&1
#print name xuzhen at 2018.8.9
#00 00 * * * /bin/sh /server/scripts/bak-etc.sh >/dev/null 2>&1
#00 */2 * * * /bin/sh /server/scripts/xuzheng.sh >/dev/null 2>&1
#print name xuzhen at 2018.8.9
#* * * * * /bin/sh /server/scripts/ip.sh >>/tmp/ip.log 2>&1
定时任务如果没有定向到文件或空
定时任务会不断给你发送邮件,会存放在邮件临时目录等待发送,会导致小文件堆积,造成inode号满,inode号用光,也可以说是定时任务书写不规范导致的。
这时就要删除大量小文件find找出大于1M的目录确认后删除
ls *.txt |xargs rm
ls *.txt |xargs -n数字 rm
缩小范围一点点删除
ls 1*.txt |xargs rm
删除目录,记录好目录权限和所有者
1.3 每分钟显示当前系统的ip地址和系统的时间 追加到/tmp/ip.log中(需要用到脚本与定时任务)
ip需要用绝对路径 不用就报错
[root@oldboy50-lnb /server/scripts]#cat ip.sh
/sbin/ip a s eth0|awk -F"[/ ]+" 'NR==3{print $3}'
date +%F_%T
书写定时任务
[root@oldboy50-lnb ~]#crontab -l
#print name xuzhen at 2018.8.9
#* * * * * /bin/sh /server/scripts/ip.sh >>/tmp/ip.log 2>&1
查看文件内容是否导入
[root@oldboy50-lnb /server/scripts]#cat /tmp/ip.log
10.0.0.200
2018-08-09_11:24:01
10.0.0.200
2018-08-09_11:25:01
1.4 显示脚本执行过程
[root@oldboy50-lnb /server/scripts]#sh -x ip.sh sh命令参数x显示脚本执行过程
+ awk '-F[/ ]+' 'NR==3{print $3}'
+ /sbin/ip a s eth0
10.0.0.200
+ date +%F_%T
2018-08-09_15:48:10
以+号开头的行 表示执行过程
不是+号开头的 显示或是输出结果
1.5 每两个小时打包备份 /etc/rc.local /etc/hosts /etc/fstab /etc/sysconfig 备份到/backup目录 脚本
写入脚本
[root@oldboy50-lnb /server/scripts]#cat xuzheng.sh
tar zchf /backup/conf-`date +%F_%T`.tzr.gz /etc/rc.local/ /etc/hosts/ /etc/fstab/ /etc/sysconfig/
写入定时任务
[root@oldboy50-lnb /server/scripts]#crontab -l
#print name xuzhen at 2018.8.9
00 */2 * * * /bin/sh /server/scripts/xuzheng.sh >/dev/null 2>&1
1.6 每天晚上12点打包备份/etc/目录 备份到 /backup下面 备份到/backup/10.0.0.200
指定变量
[root@oldboyedu50-lnb /backup]# ip=10.0.0.200
[root@oldboyedu50-lnb /backup]# echo $ip
10.0.0.200
解决空格问题(命令结果放在变量中)
[root@oldboyedu50-lnb /backup]# ip=`hostname -I|awk '{print $1}'` 使用awk获取第一行 避错
[root@oldboyedu50-lnb /backup]# echo $ip.log 测试
10.0.0.200.log
写入脚本
[root@oldboy50-lnb /server/scripts]#cat bak-etc.sh
ip=`hostname -I|awk '{print $1}'` 指定变量
mkdir -p /backup/$ip 使用变量
tar zchf /backup/$ip/etc-`date +%F_%T`.tar.gz etc/ 压缩
运行脚本检查
[root@oldboy50-lnb /server/scripts]#sh bak-etc.sh
tar: etc: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
[root@oldboy50-lnb /backup]#ls
10.0.0.200
[root@oldboy50-lnb /backup]#cd 10.0.0.200/
[root@oldboy50-lnb /backup/10.0.0.200]#ls
etc-2018-08-09_12:56:30.tar.gz etc-2018-08-09_16:15:59.tar.gz
写入定时任务
[root@oldboy50-lnb /backup/10.0.0.200]#crontab -l
#print name xuzhen at 2018.8.9
00 00 * * * /bin/sh /server/scripts/bak-etc.sh >/dev/null 2>&1
1.7 总结
1. 定时任务常见故障
1)有的命令要使用绝对路径
2)定时任务书写不规范导致inode号占满
2. 定时执行命令
3. 备份要一步一步来