美文网首页Shell
定期清理磁盘空间的脚本记录

定期清理磁盘空间的脚本记录

作者: Linux丶晨星 | 来源:发表于2020-06-15 18:01 被阅读0次

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/

相关文章

  • 定期清理磁盘空间的脚本记录

    1. 需求: 每天早上9:00执行日志备份,格式为:日志名称+年月日.zip;将每天的备份压缩包放到/zxznav...

  • SHELL删除N天前数据

    脚本名称:delete_overdue_data.sh脚本作用:磁盘空间不足,需定期删除以日期为目录名的数据目录,...

  • nexus3 orientdb数据库文件损坏处理

    Nexus因磁盘空间占满异常停机orientdb数据损坏修复,此处记录处理脚本 参考博客:Nexus因磁盘空间占满...

  • MAC 日常

    MAC 清理 mac磁盘空间一般都很小,250G应该是最常见的,动不动就提示磁盘空间不足,所以要学会定期打理自己m...

  • 定期清理es索引

    清理索引脚本vim clean-index.sh 制定计划任务,定期执行脚本crontab -e

  • 定期清理数据文件脚本

    业务需求:定时清理数据包,充分利用硬盘空间

  • docker日志清理

    我们的docker工程在运行一段时间后,要定期的清理一下docker logs 不然系统磁盘空间会被日志占满。这里...

  • sentry的日常运维总结

    一、遇到的问题总结 二、平常命令总结 三、容器的日志需要定期删除 写⼀个脚本,清理docker⽇志,crontab...

  • 日志切割工具 logrotate

    如果服务日志文件大小增长较快,不断消耗磁盘空间就会触发告警,如果需要人为定期按照各种维度去手动清理日志就显得十分棘...

  • 定期清理

    在自我管理的注意事项中,这是第三个需要注意的事项。需要定期的设定目标,与清理。尤其是对于一些不太明晰的地方,好比有...

网友评论

    本文标题:定期清理磁盘空间的脚本记录

    本文链接:https://www.haomeiwen.com/subject/viyhxktx.html