日志文件管理者:Logrotate

简介:

rotate:轮转、交替、转动、试转动


服务器在服务运行的时候,难免会生成大量日志,一般来说遇到日志过多的情况,就会写一个看门狗:监控磁盘容量的大小,如果磁盘剩余空间小于某个值,就去日志文件夹里把一个月或者几个月之前的废弃日志删除掉以达到释放磁盘空间的目的。


但是往往有的时候过期的日志很重要,或者即使是一周的时间内,也会生成容量非常可观的日志,那么就需要使用logrotate命令来管理这些日志,这个命令是linux自带的。


logrotate这个命令的用法请看:https://linux.cn/article-8227-1-rel.html 和 https://linux.cn/article-4126-1.html 。


这里简单做一个实验,首先,假设服务器里某个日志文件夹里的日志auc.log.10是这样的:

wKiom1lSQfXASwi8AAC-cpOGlH8365.png


然后在logrotate的配置文件是这么写的:

1
2
3
4
5
6
7
8
/mnt/hswx/auc/logs/auc .log.10 {             这里是目标日志的绝对路径
         daily        每天执行一次
         minsize 200M    文件容量大于200M开始处理,如果到了时间但是没有大于200M,不会处理
         compress          压缩
         dateext          文件会以日期为后缀
         create 777 root root    新建的那个日志文件属性是777
         rotate 2         保留最多2个文件
}


然后执行#logrotate -vf /etc/logrotate.conf,看到的效果是:

wKiom1lSRFLgwj-PAAGKxufJLQk441.png


命令执行后,服务器create了新的auc.log.10,而且属性变成了777,同时把原有的部分压缩成gz的格式。


上面那个测试的对象是已经过期的日志,现在我们要压缩当前的日志,目的是“在压缩了auc.log并且重命名之后,可以生成新的auc.log,同时这个新的auc.log会被写入”。


现在我们尝试一下,把原来的配置文件改成这样:

1
2
3
4
5
6
/mnt/hswx/auc/logs/auc .log {
         weekly
         minsize 200M
         compress
         rotate 2
}


但是执行之后,我们发现变成了这样:

wKioL1lSShOhzzWIAAFYalH58wE386.png


原来的auc.log不见了,而出现的auc.log.1里面的内容是原来auc.log的内容,可见原有的auc.log已经被顶掉了。这是因为我们上面的配置文件里面没有加上dateext,所以默认会以.1、.2、.3为后缀。


问题是我们没有生成auc.log,那么这段时间的日志就会找不到auc.log而凭空消失。可见这个方法没有达到我们的目的,需要改进。


但是只有重新启动这个auc进程才会生成auc.log,既然要解决这样的问题,我们很自然的就想到“kill -HUP”这种平滑启动的方式,但是要注意!kill -HUP 对deamon会进行重新读取配置启动,但是对于普通的进程只会把其杀死!而这个auc 就是一个普通的java程序,没有配套的守护进程。所以只能使用一般的重启方式来达到生成auc.log这个目的。


首先我们把原来的配置文件改成这样:

1
2
3
4
5
6
7
8
9
10
11
/mnt/hswx/auc/logs/auc .log {
         weekly     #每周执行
         dateext     #以日期作为后缀
         minsize 200M     #到达了200M自动执行,不然即使到了一周的时间也不执行
         compress     #压缩
         rotate 2     #最多保留两个文件
         sharedsripts    
         postrotate     #在执行完日志压缩之后就执行如下动作
                 /bin/bash  /root/restart .sh     #动作就是执行这个绝对路径的脚本
         endscript     #收工
}

而这个restart.sh的内容很简单: 

1
2
3
4
#!/bin/bash
cd  /mnt  && . /stopAUC .sh     #停止auc进程
cd  /mnt  && . /startAUC .sh     #启动auc进程
echo  HAHAHAHA!!!     #表示已经OK了,让我们发出杠铃一般的笑声


现在我们重新跑一下logrotate,#logrotate -vf /etc/logrotate.conf。看一下效果:

wKiom1lZuf3AT21VAADUljhenN0831.png


可以看到先把日志改名压缩,完事后也执行了restart.sh这个脚本,再日志里一看,auc.log也顺利生成了!

wKioL1lZusaTWnb1AABBW5caqHg141.png




参考资料:http://www.pythondev.org/post/8.html



 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1942514

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
51 0
|
存储 Unix Linux
CentOS7下日志轮转logrotate简单入门与实践
CentOS7下日志轮转logrotate简单入门与实践
354 0
CentOS7下日志轮转logrotate简单入门与实践
|
3月前
|
存储 监控 Ubuntu
日志切割工具-Logrotate实现nginx日志切割
日志切割工具-Logrotate实现nginx日志切割
40 0
|
4月前
|
Linux
linux下实现日志切割的两种方法 logrotate
linux下实现日志切割的两种方法 logrotate
133 0
|
9月前
|
存储 监控 Ubuntu
日志切割工具-Logrotate实现nginx日志切割
日志切割工具-Logrotate实现nginx日志切割
161 0
|
10月前
|
Linux 开发工具
Linux日志管理logrotate日志轮转
上篇文章学习了系统日志管理,对于日志来讲他是占内存的,当有大量的日志产生的时候,会有一天占满我们的内存,所以出现了日志轮转,轮转日志会删除时间久远的日志,来节省空间,这篇文章就是带大家了解学习日志轮转,通过本篇文章了解日志轮转的相关配置文件,学习怎么配置日志轮转,根据我们的需求进行配置,下面来进行学习吧。
145 0
|
11月前
|
Linux
linux下如何使用logrotate进行日志的切分
linux下如何使用logrotate进行日志的切分
8992 0
|
11月前
|
NoSQL Linux MongoDB
一日一技:使用 Linux 自带的 logrotate 管理你的所有日志
一日一技:使用 Linux 自带的 logrotate 管理你的所有日志
183 0
|
Linux
logrotate 日志滚动的使用
logrotate 日志滚动的使用
151 0
logrotate 日志滚动的使用
|
应用服务中间件 Shell Linux
使用logrotate分割Tomcat的catalina日志
使用logrotate分割Tomcat的catalina日志 切割catalian日志的方式有很多种,比如shell脚本的、cronolog或者通过配置log4j等等这些都可以实现。
2366 0