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 ~]# dateWed 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
(完)