如何在Linux上定时删除文件

前言

服务器上日志文件不断增加导致磁盘爆满,当然不仅限于日志文件,导致服务异常崩溃。

手动执行删除

当然,再删除文件之前,我们肯定要先排查是什么原因导致的。

磁盘空间占用情况

df [选项] [文件]
复制代码

image-20210515193208293.png

  • 第1列是代表文件系统对应的设备文件的路径名

  • 第2列给出分区包含的数据块(1024字节)的数目

  • 第3,4列分别表示已用的和可用的数据块数目

  • 第5列表示空间使用的百分比

  • 第 6 列表示文件系统的挂载点。

正常的使用在 df后面加上一个 -h选项就好了。

df -h
复制代码

image-20210515194119751.png

输出显示的数字形式的’G’(千兆字节),”M”(兆字节)和”K”(千字节),增加阅读感。

然后看哪个目录被使用的百分比高,就前往那个目录寻找大文件。

显示目录或文件的大小

接下来使用一个新的命令:du,可以显示目录或文件的大小。

[root@root /]# cd usr/software/
[root@root software]# du -hs
267M	.
复制代码
  • -h或–human-readable 以K,M,G为单位,提高信息的可读性。

  • -s或–summarize 仅显示总计。

删除

找到某个文件大了就可以执行删除命令了。

  • 删除文件命令:
find 对应目录 -path 忽略某个目录 -prune  -name "文件名" -mtime +天数  -exec rm -rf {} \;
复制代码
  • 实例
find /opt/app/log  -path /opt/app/log/sal -prune -o -mtime +3  -name "*log*" -print > /opt/chimes/lastlog.log -exec rm -rf {} \;
复制代码

/opt/app/log目录中查找更改时间在3日以前的文件名中包含 log 的文件,但排除 /opt/app/log/sal 目录。

  • path 查找的路径
  • prune -o: 忽略某个目录,-prune -o 的顺序不 能调换
  • mtime -n/+n 按文件更改时间来查找文件,-n指n天以内,+n指n天以前
  • name fileName:查找名为 fileName 的文件
  • print: find命令将匹配的文件输出到标准输出
  • exec : 固定写法
  • rm -rf:强制删除文件,包括目录
  • {} ; :固定写法, 注意:{} 和 \; 之间有空格

定时任务

若是觉得每过几天就需要手动执行删除语句太麻烦了,可以将这语句写到一个可执行shell脚本中,然后再创建一个 cron 调度任务,让系统帮你执行。

创建脚本文件

[root@root /]# cd /usr/local/bin/
[root@root bin]# vim clear.sh 
复制代码

sh内容

#!/bin/sh
find /opt/app/log -path /opt/app/log/sal -prune -o -mtime +3  -name "*log*" -print > /opt/chimes/lastlog.log -exec rm {} \;
复制代码

然后保存退出:wq!

测试脚本是否可用

[root@root bin]# ./clear.sh 
复制代码

没出现什么异常就是好的。

编写 cron 任务

[root@root bin]# crontab -e

0 0 * * * /usr/local/bin/clear.sh >> /usr/local/bin/clear.log
然后保存退出
wq!
复制代码

`0 0 * * * /usr/local/bin/clear.sh这段语句的意思是

每天凌晨0点0分执行clear.sh文件,进行数据清理任务。

查看脚本内容

[root@root bin]# crontab -l
0 0 * * * /usr/local/bin/clear.sh >> /usr/local/bin/clear.log
复制代码
  • 如你对本文有疑问或本文有错误之处,欢迎评论留言指出。如觉得本文对你有所帮助,欢迎点赞和关注。
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享