工作中遇到了生产系统中相关日志太多,占据大量磁盘空间,所以准备写一个crontab任务进行定期删除日志,只保留近五天的log信息。
Linux系统中文件存在三种时间属性,分别是:
Atime Mtime Ctime
三种时间分别是访问时间,修改时间,状态时间;
访问时间:对文件进行一次读操作,它的访问时间就会改变。例如像:cat、more等操作,但是state还有ls命令对atime是不会有影响的
修改时间:文件的内容被最后一次修改的时间,我们经常用的ls -l命令显示出来的文件时间就是这个时间,当用vim对文件进行编辑之后保存,它的mtime就会相应的改变
状态时间:当文件的状态被改变的时候,状态时间就会随之改变,例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime的。
此处需要记住一个命令:stat,查看文件或者文件系统的状态 ,可以查看时间等属性
当然,既然可以查看当前的atime、mtime、ctime,那肯定也可以查看几天前或者几天之内被改过或者访问过的文件。
Linux提供了一个简便的查询方式,那就是 +n 和 -n。以 -mtime 举例说明:
-mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容的文件
-mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名
-mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名
找 “5天之内被更改过的档案名” 就是 find / -mtime -5 ,找“5天前的那一天被更改过的档案名” 就是 find / -mtime 5 ,找“5天之前被更改过的档案名” 就是 find / -mtime +5。我们可以看出有没有 “+,-”的差别是很大的。下面用图来说明一下:
由这个时光轴我们可以知道,最右边为当前时,+5 代表大于等于 6 天前的档案名, -5 代表小于等于 5 天内的档案名,5 则是代表 5-6 那一天的档案名。
所以在日志目录中保留最近五天的文件,五天前前的文件自动删除。
find /opt/app/log -mtime +5 -type f -name *.[12]log -exec rm -rf {} \;
/email/v1_bak --设置查找的目录;
-mtime +5 --设置时间为91天前;
-type f --设置查找的类型为文件;
-name *.[12]log --设置文件名称中包含1log或者2log;
-exec rm -f --查找完毕后执行删除操作;
将此命令写入crontab后即可自动完成查找并删除的工作了。
或者用:find . -mtime +5 -type f | xargs rm -rf
1、编写清理日志脚本clearlogbefore5days.sh
#!/bin/sh
find /opt/log -mtime +5 -name "*.log" -exec rm {} \;
2、给脚本授权
chmod +x clearlogbefore5days.sh
3、加入定时执行任务
crontab -e
在最后加入:00 2 * * * root /home/slynux/clearlogbefore5days.sh