CentOS 7 只保留最近 N 天的日志文件
在 CentOS 7 系统中,对于某些服务的日志文件操作。例如,Apache、Nginx 等服务,只保留最近 N 天的日志文件。
创建测试环境
在/root/nginx/logs
目录下,创建 20 个日志文件,从2019-03-01
到2019-03-20
。并且,将系统日期修改为2019-03-20
。
for time in {01..20}; do date -s "201903$time"; touch /root/nginx/logs/access_www_$(date +%F).log ; done
[root@centos7 ~]# ls -l /root/nginx/logs/
total 0
-rw-r--r-- 1 root root 0 Mar 1 00:00 access_www_2019-03-01.log
-rw-r--r-- 1 root root 0 Mar 2 00:00 access_www_2019-03-02.log
-rw-r--r-- 1 root root 0 Mar 3 00:00 access_www_2019-03-03.log
-rw-r--r-- 1 root root 0 Mar 4 00:00 access_www_2019-03-04.log
-rw-r--r-- 1 root root 0 Mar 5 00:00 access_www_2019-03-05.log
-rw-r--r-- 1 root root 0 Mar 6 00:00 access_www_2019-03-06.log
-rw-r--r-- 1 root root 0 Mar 7 00:00 access_www_2019-03-07.log
-rw-r--r-- 1 root root 0 Mar 8 00:00 access_www_2019-03-08.log
-rw-r--r-- 1 root root 0 Mar 9 00:00 access_www_2019-03-09.log
-rw-r--r-- 1 root root 0 Mar 10 00:00 access_www_2019-03-10.log
-rw-r--r-- 1 root root 0 Mar 11 00:00 access_www_2019-03-11.log
-rw-r--r-- 1 root root 0 Mar 12 00:00 access_www_2019-03-12.log
-rw-r--r-- 1 root root 0 Mar 13 00:00 access_www_2019-03-13.log
-rw-r--r-- 1 root root 0 Mar 14 00:00 access_www_2019-03-14.log
-rw-r--r-- 1 root root 0 Mar 15 00:00 access_www_2019-03-15.log
-rw-r--r-- 1 root root 0 Mar 16 00:00 access_www_2019-03-16.log
-rw-r--r-- 1 root root 0 Mar 17 00:00 access_www_2019-03-17.log
-rw-r--r-- 1 root root 0 Mar 18 00:00 access_www_2019-03-18.log
-rw-r--r-- 1 root root 0 Mar 19 00:00 access_www_2019-03-19.log
-rw-r--r-- 1 root root 0 Mar 20 00:00 access_www_2019-03-20.log
[root@centos7 ~]# date -s "20190320"
Wed Mar 20 00:00:00 CST 2019
[root@centos7 ~]# date
Wed Mar 20 00:00:03 CST 2019
实现目标,只保留最近 7 天的日志文件。
其中date -s "20190320"
命令表示,临时修改系统时间为2019/03/20
,重启系统后自动恢复为当前时间。
方法 1 :使用 find 命令
使用find
命令,查找/root/nginx/logs/
目录下 7 天之前的日志文件。
- 参数
-type f
表示查找类型为文件。 - 参数
-name "*.log"
表示查找文件名称以.log
结尾的文件。 - 参数
-mtime +7
表示查找文件的数据最后修改时间为 7 天前的。
[root@centos7 ~]# find /root/nginx/logs/ -type f -name "*.log" -mtime +7 | xargs ls -l
-rw-r--r-- 1 root root 0 Mar 1 00:00 /root/nginx/logs/access_www_2019-03-01.log
-rw-r--r-- 1 root root 0 Mar 2 00:00 /root/nginx/logs/access_www_2019-03-02.log
-rw-r--r-- 1 root root 0 Mar 3 00:00 /root/nginx/logs/access_www_2019-03-03.log
-rw-r--r-- 1 root root 0 Mar 4 00:00 /root/nginx/logs/access_www_2019-03-04.log
-rw-r--r-- 1 root root 0 Mar 5 00:00 /root/nginx/logs/access_www_2019-03-05.log
-rw-r--r-- 1 root root 0 Mar 6 00:00 /root/nginx/logs/access_www_2019-03-06.log
-rw-r--r-- 1 root root 0 Mar 7 00:00 /root/nginx/logs/access_www_2019-03-07.log
-rw-r--r-- 1 root root 0 Mar 8 00:00 /root/nginx/logs/access_www_2019-03-08.log
-rw-r--r-- 1 root root 0 Mar 9 00:00 /root/nginx/logs/access_www_2019-03-09.log
-rw-r--r-- 1 root root 0 Mar 10 00:00 /root/nginx/logs/access_www_2019-03-10.log
-rw-r--r-- 1 root root 0 Mar 11 00:00 /root/nginx/logs/access_www_2019-03-11.log
-rw-r--r-- 1 root root 0 Mar 12 00:00 /root/nginx/logs/access_www_2019-03-12.log
[root@centos7 ~]#
参数 -mtime 7
表示,查找文件的数据最后修改时间为第 7 天的。
[root@centos7 ~]# find /root/nginx/logs/ -type f -name "*.log" -mtime 7 | xargs ls -l
-rw-r--r-- 1 root root 0 Mar 13 00:00 /root/nginx/logs/access_www_2019-03-13.log
参数 -mtime -7
表示,查找文件的数据最后修改时间为最近 7 天的。
[root@centos7 ~]# find /root/nginx/logs/ -type f -name "*.log" -mtime -7 | xargs ls -l
-rw-r--r-- 1 root root 0 Mar 14 00:00 /root/nginx/logs/access_www_2019-03-14.log
-rw-r--r-- 1 root root 0 Mar 15 00:00 /root/nginx/logs/access_www_2019-03-15.log
-rw-r--r-- 1 root root 0 Mar 16 00:00 /root/nginx/logs/access_www_2019-03-16.log
-rw-r--r-- 1 root root 0 Mar 17 00:00 /root/nginx/logs/access_www_2019-03-17.log
-rw-r--r-- 1 root root 0 Mar 18 00:00 /root/nginx/logs/access_www_2019-03-18.log
-rw-r--r-- 1 root root 0 Mar 19 00:00 /root/nginx/logs/access_www_2019-03-19.log
-rw-r--r-- 1 root root 0 Mar 20 00:00 /root/nginx/logs/access_www_2019-03-20.log
如果想要删除日志文件,把ls -l
替换为rm
就可以了。例如,删除 7 天前的日志文件。
find /root/nginx/logs/ -type f -name "*.log" -mtime +7 | xargs rm
方法 2 :使用 $()
[root@centos7 ~]# ls -l $(find /root/nginx/logs/ -type f -name "*.log" -mtime +7)
-rw-r--r-- 1 root root 0 Mar 1 00:00 /root/nginx/logs/access_www_2019-03-01.log
-rw-r--r-- 1 root root 0 Mar 2 00:00 /root/nginx/logs/access_www_2019-03-02.log
-rw-r--r-- 1 root root 0 Mar 3 00:00 /root/nginx/logs/access_www_2019-03-03.log
-rw-r--r-- 1 root root 0 Mar 4 00:00 /root/nginx/logs/access_www_2019-03-04.log
-rw-r--r-- 1 root root 0 Mar 5 00:00 /root/nginx/logs/access_www_2019-03-05.log
-rw-r--r-- 1 root root 0 Mar 6 00:00 /root/nginx/logs/access_www_2019-03-06.log
-rw-r--r-- 1 root root 0 Mar 7 00:00 /root/nginx/logs/access_www_2019-03-07.log
-rw-r--r-- 1 root root 0 Mar 8 00:00 /root/nginx/logs/access_www_2019-03-08.log
-rw-r--r-- 1 root root 0 Mar 9 00:00 /root/nginx/logs/access_www_2019-03-09.log
-rw-r--r-- 1 root root 0 Mar 10 00:00 /root/nginx/logs/access_www_2019-03-10.log
-rw-r--r-- 1 root root 0 Mar 11 00:00 /root/nginx/logs/access_www_2019-03-11.log
-rw-r--r-- 1 root root 0 Mar 12 00:00 /root/nginx/logs/access_www_2019-03-12.log
方法 3 :使用 find 命令的 -exec 参数
[root@centos7 ~]# find /root/nginx/logs/ -type f -name "*.log" -mtime +7 -exec ls -l {} \;
-rw-r--r-- 1 root root 0 Mar 5 00:00 /root/nginx/logs/access_www_2019-03-05.log
-rw-r--r-- 1 root root 0 Mar 8 00:00 /root/nginx/logs/access_www_2019-03-08.log
-rw-r--r-- 1 root root 0 Mar 7 00:00 /root/nginx/logs/access_www_2019-03-07.log
-rw-r--r-- 1 root root 0 Mar 12 00:00 /root/nginx/logs/access_www_2019-03-12.log
-rw-r--r-- 1 root root 0 Mar 6 00:00 /root/nginx/logs/access_www_2019-03-06.log
-rw-r--r-- 1 root root 0 Mar 3 00:00 /root/nginx/logs/access_www_2019-03-03.log
-rw-r--r-- 1 root root 0 Mar 4 00:00 /root/nginx/logs/access_www_2019-03-04.log
-rw-r--r-- 1 root root 0 Mar 9 00:00 /root/nginx/logs/access_www_2019-03-09.log
-rw-r--r-- 1 root root 0 Mar 11 00:00 /root/nginx/logs/access_www_2019-03-11.log
-rw-r--r-- 1 root root 0 Mar 2 00:00 /root/nginx/logs/access_www_2019-03-02.log
-rw-r--r-- 1 root root 0 Mar 10 00:00 /root/nginx/logs/access_www_2019-03-10.log
-rw-r--r-- 1 root root 0 Mar 1 00:00 /root/nginx/logs/access_www_2019-03-01.log
(完)