shell脚本实现自动保留最近n次备份记录

代码星冰乐

专注成就未来

首页 归档 关于

shell脚本实现自动保留最近n次备份记录

Dec 8, 2017 | haifeiWu | Java | 阅读
文章目录
  1. 1. 解决方案的实现过程
    1. 1.1. 获取备份文件夹下的所有文件
    2. 1.2. 解决方案的思路及shell脚本的实现
    3. 1.3. 思路
    4. 1.4. shell脚本的实现

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2017/b277/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。


由于版权原因,请阅读原文 --> shell脚本实现自动保留最近n次备份记录

关注我们

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2017/b277/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2017/b277/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

某天上午服务器出现卡顿特别严重,页面加载速度奇慢,并且某些页面刷新出现404的问题,就连服务器的tab命令的自动提示都出现了问题,楼主费了九牛二虎之力,根据服务器排查发现,服务器数据盘出现100%被占用的问题,导致该问题出现的原因是,Jenkins每次部署服务器的时候,都会自动将上一次的war备份,由于开发阶段的频繁部署,最终硬盘被占满,便出现上述描述的情况。

解决方案的实现过程

获取备份文件夹下的所有文件

根据Google爸爸的提示,楼主找到了下面的命令,

1
find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;

实例命令:

1
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;

说明:

将/opt/soft/log/目录下所有30天前带”.log”的文件删除。

具体参数说明如下:

find:linux的查找命令,用户查找指定条件的文件;
/opt/soft/log/:想要进行清理的任意目录;
-mtime:标准语句写法;
+30:查找30天前的文件,这里用数字代表天数;
“ ×.log”:希望查找的数据类型,”×.jpg”表示查找扩展名为jpg的所有文件,”×”表示查找所有文件,这个可以灵活运用,举一反三;
-exec:固定写法;
rm -rf:强制删除文件,包括目录;
{} \; :固定写法,一对大括号+空格++;

解决问题的思路:

当然楼主当然不能傻乎乎的将备份目录下的所有文件都删除掉,这样的话,备份不就失去了意义。
所以换一下思路便有了下面的命令

1
find ${BAK_HOME} -mtime +1 -name "*:*" | wc -l

说明:

获取备份目录下所有一天前带”:”的所有文件数量。

1
find ${BAK_HOME} -mtime +1 -name "*:*"

说明:

获取备份目录下所有一天前带”:”的所有文件数量。

到了这里我们的问题差不多就可以解决了。so,请接着往下看:

解决方案的思路及shell脚本的实现

思路

目前解决该问题的方法是在原来部署脚本中添加一段脚本,实现保留最近10次部署的备份记录,超过10次的备份记录将被删除.

shell脚本的实现

逻辑很清晰,思路很明了,我就不在这里接着阐述了,谢谢大家!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
BAK_HOME="/home/saveHistoryData/iam-share-8083"

keepNum=5
fileNum=$(find ${BAK_HOME} -mtime +1 -name "*:*" | wc -l)

echo "${fileNum}"

for file in $(find ${BAK_HOME} -mtime +1 -name "*:*"); do
if test $[fileNum] -gt $[keepNum];then
rm -rf ${file}
fileNum=${fileNum}-1
echo "delete backup file"
else
echo "do no thing"
fi
done

关注我们

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2017/b277/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

分享
Shell
2017年度总结Kotlin委托
微信关注我们
分类
  • Android8
  • Go4
  • Java59
  • Kafka,Java1
  • Kotlin2
  • Linux1
  • MapReduce1
  • Python2
  • Raft1
  • Redis1
  • ThreadPoolExecutor1
  • go1
  • 工具1
  • 总结8
  • 旅游日记1
标签
Nginx ChanghuiN haifeiWu Android Java 设计模式 hexo Kotlin 算法 MySQL 源码解析 Python Redis golang web Kafka 配置中心 总结 性能优化 旅游日记 Shell Go 问题排查 译文 Docker Spring Boot 工具 学习笔记 WebFlux 性能测试 go 散列表 源码 netty Raft
最近文章
  • Kafka的日志复制机制
  • 从20到21
  • go 并发编程
  • 【译】了解Linux CPU负载-您何时应该担心?
  • Zookeeper 与分布式锁
  • 基于Redis的分布式锁到底安全吗?
  • 【译】Raft 学生指南
  • ThreadPoolExecutor 的简单梳理
  • MapReduce 的简单实现
  • 使用 Map 实现策略模式
福利专区
    免费SSL证书
      阿里云红包
        腾讯云专属福利
        Copyright © 2021 代码星冰乐. Powered by ChanghuiN. 版权所有 晋ICP备15001365号
        特别感谢: 云服务器服务商 、 CDN 服务商