linux日志自动分割 or linux logrotate
场景
某些程序没有自带日志分隔功能,天长日久,日志越来越臃肿。 这个时候可以用系统自带的 logrotate 来进行切割。 通常 logrotate 是各个 linux 发行版都会默认安装的,你只需要进行配置即可。
使用
- 进入其默认设置目录
cd /etc/logrotate.d
- 创建一个无后缀文件,用来存放你的分割配置
以MongoDB为例,创建一个名为 mongod 文件,并加入以下代码并保存。
/var/log/mongodb/*.log {
create 0644 mongod mongod
daily
rotate 30
dateext
missingok
notifempty
sharedscripts
postrotate
/bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod0.pid 2>/dev/null` 2>/dev/null || true
/bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod1.pid 2>/dev/null` 2>/dev/null || true
/bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod2.pid 2>/dev/null` 2>/dev/null || true
endscript
}
参数说明
-
/var/log/mongodb/*.log: 这里应该填写程序对应的日志路径(星号为通配符,也可以直接写死)
-
daily: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
-
rotate n: 日志存档的数量,超过这个数量后,时间最久的归档将被删除。
-
compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
-
delaycompress: 总是与compress选项一起用,表示不压缩本次归档日志。 压缩将在下一次归档后进行。这方便对近期日志阅读。
-
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
-
notifempty: 如果日志文件为空,轮循不会进行。
-
sharedscripts: 这个参数是确保 postrotate和endscript 之间的指令会在所有日志都被归档后执行。 如果没有该参数,那么每归档完一个日志文件,就会执行一次 postrotate和endscript 之间的指令。
-
create 644 mongod mongod: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
-
postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。 这里可以放入你需要执行的一些命令,比如程序本身建议的日志分割信号指令等。
-
dateext: 该参数加入后,归档后日志的文件名中会出现日期,这样方便以后对日志的处理