Logrotate日志切割

  • 1. 配置文件
  • 1.1 配置放在那里
  • 1.2 配置文件参数含义
  • 2. 范例
  • 3. 手动触发测试



在Linux下,日志会不停的增长,为了防止日志文件过大,导致我们无法在日志中快速找到想要的信息,我们会定时对日志文件进行切割。在这里我将使用logrotate切割日志。


logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。


我们可以根据日志的大小,或者根据其使用的天数来转储。


logrotate的执行由crond服务实现,参考 /etc/cron.daily/logrotate 脚本,该脚本每天由cron在指定的时间(/etc/crontab)启动。

1. 配置文件

1.1 配置放在那里

配置内容可以放在两个地方:

  1. /etc/logrotate.conf
    主配置文件
  2. /etc/logrotate.d/
    主配置文件中调用

lnginx日志分割删除 logrotate日志切割_linux

1.2 配置文件参数含义

参数

作用

missingok

日志切割期间产生错误将被忽略(如果日志丢失,不报错继续切割)

daily、weekly、monthly、yearly

每天、每周、每月、每年执行

create MODE OWNER GROUP

切割后指定创建新的空白文件的属性

nocreate

不建立新的日志文件

rotate N

保留N份,多余删除,不计算新建日志文件

dateext

用当前日期作为后缀命名格式(默认年月日)

dateformat .%s

配合dateext使用,紧跟在下一行出现,定义切割后的文件名,只支持%Y,%m,%d,%s

size/minsize

达到指定大小才会切割,默认单位bytes,还可以是KB和MB

compress

切割结束后,归档并使用gzip格式压缩

nocompress

解除compress参数

delaycompress

总是与compress参数一起使用,指示logrotate不要将最近的归档压缩,压缩将在下一次切割进行。

nodelaycompress

解除delaycompress参数

ifempty

即使日志为空,也执行切割

notifempty

如果日志为空,切割不执行

prerotate/endscript

在所有其他指令之前执行prerotate和endscript之间的命令。

postrotate/endscript

在所有其他指令完成后,postrotate和endscript之间的命令将被执行。

sharescripts

所有日志切割后统一执行一次脚本,如果没有配置该参数,则每个日志切割后都会执行一次脚本。

errors ADDRESS

切割时的错误信息发送到指定的Emial地址

mail ADDRESS

切割日志发送到指定的Email地址

nomail

切割日志不发送邮件

olddir DIRECTORY

切割后的日志文件放入指定目录,必须与当前日志处在同一文件系统

noolddir

切割后的日志文件与当前文件放在同一目录下

copytruncate

用于还在打开中的日志文件,把当前日志备份并截断;先拷贝后清空,可能丢失部分日志

nocopytruncate

备份日志文件,但不截断。

2. 范例

cat > /etc/logrotate.d/nginx.conf <<EOF
/app/nginx/logs/*.log {			#对log后缀的进行转储
	su root root				# 以root用户运行
	daily						#每天一次
	rotate 7					#保留7天代
	missingok				#如果日志不存在,不提示错误,继续处理下一个
	notifempty				#如果不空就转储,如果空的就不转储
	#######如果需要压缩可以##################
	#   compress				#进行压缩
	#	delaycompress			#延迟压缩
	######################################
	size	10M					#当文件大于10M转储,1天检查一次
	nocompress				#不压缩
	delaycompress			#延迟压缩
	create 644 nginx nginx		#新文件权限
	postrotate				#转储后的操作
		if [ -f /app/nginx/log/nginx.pid ];then
			kill -USR1 `cat /app/nginx/logs/nginx.pid`			#nginx重启
		fi
	endscript
}
EOF

3. 手动触发测试

logrotate /etc/logrotate.d/nginx.conf

lnginx日志分割删除 logrotate日志切割_linux_02

至此logrotate配置完毕.