主流Linux发行版上都默认安装有logrotate包
在Debian或Ubuntu上:
1 | # apt-get install logrotate cron |
在Fedora,CentOS或RHEL上:
1 | # yum install logrotate crontabs |
logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,放在/etc/logrotate.d/目录下。
使用
配置说明
- monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
- rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
- compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
- nocompress: 不压缩
- copytruncate: 用于还在打开中的日志文件,把当前日志备份并截断
- nocopytruncate: 备份日志文件但是不截断
- delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
- nodelaycompress: 覆盖 delaycompress 选项,转储同时压缩。
- mail address: 把转储的日志文件发送到指定的E-mail 地址
- nomail: 转储时不发送日志文件
- olddir directory: 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
- noolddir: 转储后的日志文件和当前日志文件放在同一个目录下
- missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
- notifempty: 如果日志文件为空,轮循不会进行。
- create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
- nocreate: 不建立新的日志文件
- postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
- tabooext [+] list: 让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
- size size: 当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)
- missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
样例一
创建一个日志文件,然后在其中填入一个10MB的随机比特流数据。
1 | # touch /var/log/log-file |
基本使用
1 | /var/log/log-file { |
样例二
轮循一个日志文件
1 | /var/log/log-file { |
样例三
轮循一个nginx日志文件
1 | /usr/local/nginx/logs/*.log { |
样例四
让旧日志文件以创建日期命名
1 | /var/log/log-file { |
排障
手动运行logrotate
要调用为/etc/lograte.d/下配置的所有日志调用logrotate:
1 | # logrotate /etc/logrotate.conf |
要为某个特定的配置调用logrotate:
1 | # logrotate /etc/logrotate.d/log-file |
排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。
1 | # logrotate -d /etc/logrotate.d/log-file |
Logrotate的记录日志
logrotate自身的日志通常存放于/var/lib/logrotate/status目录。如果处于排障目的,我们想要logrotate记录到任何指定的文件,我们可以指定像下面这样从命令行指定。
1 | # logrotate -vf –s /var/log/logrotate-status /etc/logrotate.d/log-file |
Logrotate定时任务
logrotate需要的cron任务应该在安装时就自动创建了,我把cron文件的内容贴出来,以供大家参考。
1 | # cat /etc/cron.daily/logrotate |
1 | #!/bin/sh |