Linux 自动删除日志文件(N天或特定日期)

本文将会讲述如何在Linux系统下自动删除特定日期或者N天系统生成的日志文件或者归档文件或者特定某类文件。

Linux系统和windows系统一样,在系统的运行过程中,会不断的产生日志文件或者日志归档文件,或者其它不同类型的日志文件。随着日志的不断输出到文件里,文件的大小也会越来越大,这样该日志文件就会占据越来多的磁盘空间,而且有可能会将可用存储空间全部占用,这样就有可能导致你的机器越来越慢,相应的服务也会停止。为了防止日志文件变大后,导致的系统不能正常访问,我们需要定期的清理或者删除这些日志文件。

查看Linux系统日志文件

对于Linux 下APACHE服务器里,系统会产生访问时的日志文件,错误访问日志文件,MySQL数据库服务也会产生相应的日志文件, 大多数Linux系统的默认系统日志文件都会放在/var/log/目录下,通过下执行下面的命令来查看Linux系统的日志文件:

#ls /var/log/*

命令输出如下:

root@devops:~# ls /var/log/*
alternatives.log bootstrap.log gpu-manager.log syslog.2.gz
alternatives.log.1 btmp installer syslog.3.gz
......

Linux系统下自动删除日志文件的方

首先我们要查找到你要删除的N天生成日志文件,之后再通过Linux rm命令删除日志文件。 之前我们已经介绍过Linux如何根据文件日期删除文件的方法,所以我们现在只需要在该方法的基础上,实现如何自动删除就可以了。我们可通过Linux下的定时任务命令crontab来实现特定日期日志文件的自动删除。

实例:Linux 下自动删除5天前更改或生成的系统日志文件,参照下面的几个步骤,

1# 确定删除特定日期的日志文件的命令,可以使用下面的命令

find /var/log/ -mtime +5 -name message* -exec rm -rf {} \;

该命令解释如下:

find 是Linux下的查找文件命令
/var/log/ 是指定要查找的文件路径
-mtime 是find 命令下参数,用来指定find命令要根据文件的更改日期来进行查找
+5 是指查找五天前生成或更改过的所有文件(如果是-5, 是指查找五天内生成或更改过的文件)
-name 是指定要查找的文件的模式匹配
-exec 是指当find查找到文件后,要执行的动作。比如删除操作
rm -rf 是指要删除查找到的文件

2# 创建shell脚本文件,将上面的命令加入到脚本里,方便以后调用

执行下面命令:

#vi autoDeleteLog.sh

输入下面的脚本内容:

#!/bin/bash
find /var/log/ -mtime +5 -name message* -exec rm -rf {} \;

保存退出。

3# 为脚本文件增加可执行权

执行下面命令:

#chmod u+x autoDeleteLog.sh

4# 定制计划任务,自动执行autoDeleteLog.sh 脚本

执行命令:

#crontab -e

输入下面的内容:

00 02 * * * /root/autoDeleteLog.sh >/dev/null 2>&1

这样在每天的凌晨2点钟的时候,系统会自动执行日志删除脚本对过期的日志文件进行删除操作。

4# 查看定制的计划任

执行命令如下:

#crontab -l

如果要自动删除特定目录下特定日期的归档文件,只需要将第二步中删除日志文件的命令换成下面的命令:

find /var/log/ -mtime +5 -name *.tgz -exec rm -rf {} \;

如果需要自动删除特定日期的Nginx服务器的日志文件,可以执行下面的脚本,并按照上面的方法,将其通过crontab命令加到系统的计划任务里即可。

#!/bin/bash
find /usr/local/nginx/logs -mtime +5 -type f -name *.log | xargs rm -f

Leave a Reply