
1. 需求:
每天早上9:00执行日志备份,格式为:日志名称+年月日.zip;
将每天的备份压缩包放到/zxznav/目录下;
将每天将需要删除的日志文件进行清空和删除;
每天定时删除30天以前的日志备份压缩文件,本地仅保留30天内的日志备份。
Linux删除文件可使用du+sort命令进行筛选删除
[root@localhost ~]# du -sh /* | sort -nr
11G /usr
7.9G /extend
7.0G /var
4.0K /doer.svg
3.2M /tmp
3.2G /opt
2.8G /home
1.7G /zxznav
1.2G /root
2. 测试命令
日志的路径
/extend/logs/
/extend/doer/logs
/extend/tdoer/logs
/var/log/httpd/
以日志名称+年月日.zip的格式备份到/zxznav/目录下
cd /extend/logs/
zip -qr /zxznav/extend_logs_`date +%F`.zip ./*
cd /extend/doer/logs
zip -qr /zxznav/extend_doer_logs_`date +%F`.zip ./*
cd /extend/tdoer/logs
zip -qr /zxznav/extend_tdoer_logs_`date +%F`.zip ./*
cd /var/log/httpd/
zip -qr /zxznav/httpd_access_logs_`date +%F`.zip ./access*
zip -qr /zxznav/httpd_error_logs_`date +%F`.zip ./error*
每天将需要删除的日志文件进行清空和删除
find /extend/logs/ -name '*.log'|sed -r 's#(.*)#> \1#g'|bash
find /extend/doer/logs/ -name '*.log' | sed -r 's#(.*)#> \1#g'|bash
find /extend/tdoer/logs/ -name '*.log' | sed -r 's#(.*)#> \1#g'|bash
find /var/log/httpd/ -name '*_log' | sed -r 's#(.*)#> \1#g'|bash
find /var/log/httpd/ -name '*log-*' | sed -r 's#(.*)#rm -f \1#g'|bash
删除/zxznav/目录下30天以前的日志备份压缩文件
find /zxznav/ -type f -name "*logs*.zip" -mtime +30 | xargs rm -f
3. 书写脚本并测试脚本
脚本路径: /extend/update/scripts/
添加执行权限
[root@localhost ~]# chmod +x /extend/update/scripts/check_disk.sh
[root@localhost ~]# cat /extend/update/scripts/check_disk.sh
#!/bin/bash
##############################################################
# File Name: check_disk.sh
##############################################################
#定期清空指定服务路径下的日志
#/extend/logs/
#/extend/doer/logs
#/extend/tdoer/logs
#/var/log/httpd/
#以日志路径名称+年月日.zip 的格式备份压缩到/zxznav/目录下
cd /extend/logs/
zip -qr /zxznav/extend_logs_`date +%F`.zip ./*
cd /extend/doer/logs
zip -qr /zxznav/extend_doer_logs_`date +%F`.zip ./*
cd /extend/tdoer/logs
zip -qr /zxznav/extend_tdoer_logs_`date +%F`.zip ./*
cd /var/log/httpd/
zip -qr /zxznav/httpd_access_logs_`date +%F`.zip ./access*
zip -qr /zxznav/httpd_error_logs_`date +%F`.zip ./error*
#查找指定日志路径下以".log"格式结尾的日志并清空
find /extend/logs/ -name '*.log'|sed -r 's#(.*)#> \1#g'|bash
find /extend/doer/logs/ -name '*.log' | sed -r 's#(.*)#> \1#g'|bash
find /extend/tdoer/logs/ -name '*.log' | sed -r 's#(.*)#> \1#g'|bash
find /var/log/httpd/ -name '*_log' | sed -r 's#(.*)#> \1#g'|bash
find /var/log/httpd/ -name '*log-*' | sed -r 's#(.*)#rm -f \1#g'|bash
#反馈脚本执行结果, crontab中会输出到日志
echo "`date +%F-%H:%M` delete logs is ok!"
du -sh /var/log/httpd/ /extend/logs/ /extend/doer/logs/ /extend/tdoer/logs/
#删除/zxznav/目录下30天以前的各日志备份压缩文件,本地仅保留30天内的日志备份文件
find /zxznav/ -type f -name "*logs*.zip" | xargs rm -f
4. 写入定时任务
[root@localhost ~]# crontab -l
#Backup&Delete Logs 每天09:00执行备份日志和清空日志的脚本
00 09 * * * /extend/update/scripts/check_disk.sh >/tmp/delete_logs.log 2>&1
5. 测试参考
为httpd的access日志中追加1-1000的数字,error日志中追加a-z的字母
[root@localhost zxznav]# echo {1..1000} >/var/log/httpd/access_log
[root@localhost zxznav]# echo {a..z} >/var/log/httpd/error_log
[root@localhost zxznav]# cat /var/log/httpd/error_log
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@localhost zxznav]# cat /var/log/httpd/access_log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78...
然后通过crontab设置每分钟执行进行一次测试
* * * * * /extend/update/scripts/check_disk.sh >>/tmp/delete_logs.log 2>&1
备份好的日志压缩包,解压后查看内容
[root@localhost zxznav]# ll httpd_*
-rw-r--r-- 1 root root 170 6月 15 17:15 httpd_access_logs_2020-06-15.zip
-rw-r--r-- 1 root root 168 6月 15 17:15 httpd_error_logs_2020-06-15.zip
[root@localhost zxznav]# unzip httpd_access_logs_2020-06-15.zip
[root@localhost zxznav]# unzip httpd_error_logs_2020-06-15.zip
[root@localhost zxznav]# cat error_log
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@localhost zxznav]# cat access_log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78...
执行完毕后查看已经清空日志,腾出磁盘空间
[root@localhost zxznav]# tail -f /tmp/delete_logs.log
2020-06-15-15:12 delete logs is ok!
0 /var/log/httpd/
8.0K /extend/logs/
4.0K /extend/doer/logs/
72K /extend/tdoer/logs/
网友评论