1.需求

按时间删除 kafka 产生的日志

2.查看 /tmp/kafka-logs目录

cd /tmp/kafka-logs
ls

image.png

3.使用find命令按时间筛选

find 参数说明

-amin -n: 最后一次访问发生在 n分钟 之内
-amin n:  最后一次访问发生在距离当前时间 n分钟 至 (n+1)分钟
-amin +n: 最后一次访问发生在 (n+1)分钟 之外
-atime -n: 最后一次访问发生在 n天 之内
-atime n: 最后一次访问发生在 n天 至 (n+1)天 
-atime +n: 最后一次访问发生在 (n+1)天 之外
-cmin -n: 最后一次文件状态修改发生在 n分钟 之内
-cmin n: 最后一次文件状态修改发生在 n分钟 至 (n+1)分钟
-cmin +n: 最后一次文件状态修改发生在 (n+1)分钟 之外
-ctime -n: 最后一次文件状态修改发生在 n天 之内
-ctime n: 最后一次文件状态修改发生在 n天 至 (n+1) 天
-ctime +n: 最后一次文件状态修改发生在 (n+1)天 之外
-mmin -n: 最后一次文件内容修改发生在 n分钟 之内
-mmin n: 最后一次文件内容修改发生在 n分钟 至 (n+1)分钟
-mmin +n: 最后一次文件内容修改发生在 (n+1)分钟 之外
-mtime -n: 最后一次文件内容修改发生在 n天 之内
-mtime n: 最后一次文件内容修改发生在 n天 至 (n+1)天
-mtime +n: 最后一次文件内容修改发生在 (n+1)天 之外
#查找文件内容修改发生在2天之内的文件
find /tmp/kafka-logs -name "*" -mtime -2  

4.执行删除

#删除5天前的文件 
# -exec参数,如果查找有返回,可在exec参数后加上需要操作的命令,查找结果用{}来代替
find /tmp/kafka-logs -name "*" -mtime +5 -exec rm -rfv {} ;

5.释放磁盘空间

rm只是将文件链接解除,如果此时有进程打开文件,系统是不会回收文件。说白就是,你删除的文件被放入了“回收站”,但是你看不这个“回收站”,但文件还占用着磁盘空间。此时,在删除文件的目录下,执行ls命令已经看不到被删除的文件了,用du -sh命令也发现磁盘容量很少,但是执行df -h会发现磁盘使用率并没有变化

  • 解决思路:
一般情况下,有下面两种方案:

①重启电脑,系统就会回收磁盘空间。
②kill掉打开文件的进程。
③之后如果想永久删除文件,应该这样执行rm命令,/bin/rm -f catalina.out.xxx,其效果等同于windows下shift+delete 永久删除
  • 方案可执行性
作为线上生产环境的服务器,重启肯定不行。所以第一条直接pass,线上服务器也千万别随随便便重启,影响很大。
第三条,是之后删除文件可以用到的,对于目前的情况不适用,所以pass。
  • 采用办法
1、通过命令lsof|grep deleted可以看到日志文件处于deleted状态
2、通过 kill -9 pid 杀死进程即可

综上命令可用 lsof -n  |grep deleted|awk '{print $2}'|xargs kill -9 对已删除文件进程进行批量杀死
  • 推荐使用方法清空文件
a)# echo " " > /home/whoops.log
b)# cat /dev/null > /home/whoops.log
c)# > /home/whoops.log
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐