logrotate是日志循环管理工具,可以分割日志文件,删除旧的日志文件,创建新的日志文件,循环管理日志从而节省磁盘空间。

logrotate命令格式:

logrotate [OPTION...] <configfile>

-d, –debug :debug模式,测试配置文件是否有错误。 -f, –force :强制转储文件。 -m, –mail=command :发送日志到指定邮箱。 -s, –state=statefile :使用指定的状态文件。 -v, –verbose :显示转储过程。

手动执行logrotate(用于测试):

/usr/sbin/logrotate -vf /etc/logrotate.conf

如果没有报错生成了转储文件表示成功。

自动执行logrotate:

在/etc/cron.daily目录下有logrotate执行的脚本,通过crontab程序每天执行一次。

logrotate配置文件:

logrotate的默认配置文件是/etc/logrotate.conf。会读取/etc/logrotate.d下面的各个应用的配置文件,覆盖默认配置文件里面的设置。

配置文件参数:

  • compress 通过gzip压缩转储以后的日志
  • nocompress 不压缩
  • copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
  • nocopytruncate 备份日志文件但是不截断
  • create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
  • nocreate 不建立新的日志文件
  • delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
  • nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
  • errors address 专储时的错误信息发送到指定的Email 地址
  • ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
  • notifempty 如果是空文件的话,不转储
  • mail address 把转储的日志文件发送到指定的E-mail 地址
  • nomail 转储时不发送日志文件
  • olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
  • noolddir 转储后的日志文件和当前日志文件放在同一个目录下
  • prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • daily 指定转储周期为每天
  • weekly 指定转储周期为每周
  • monthly 指定转储周期为每月
  • rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
  • tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
  • size size 当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)

示例(nginx的logrotate配置文件):

/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
 [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}

说明: daily:日志文件每天转储一次。 missingok:日志文件不存在不报错 rotate 52:转储文件保留52份。 compress:转储后压缩(.tar.gz) delaycompress:转储的日志文件到下一次转储时才压缩 notifempty :如果是空文件,则不转储。 create 640 nginx adm:切割后创建的日志文件属性。 postrotate/endscript :日志转储后执行的脚本;这里用来让nginx重新生成日志文件,nginx.pid里存的是nginx的主进程号。