zoukankan      html  css  js  c++  java
  • Logrotate还有谁记得它??

    我发现很多人的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!

    Logrotate的介绍

    logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。
    logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。
    显而易见,Logrotate是基于CRON来运行的,其脚本是「/etc/cron.daily/logrotate」:
    1. [caoxiaojian@web1 etc]$ cat /etc/cron.daily/logrotate
    2. #!/bin/sh
    3. /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
    4. EXITVALUE=$?
    5. if [ $EXITVALUE != 0 ]; then
    6. /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
    7. fi
    8. exit 0
    实际运行时,Logrotate会调用配置文件「/etc/logrotate.conf」:
    1. [caoxiaojian@web1 etc]$ cat /etc/logrotate.conf
    2. # see "man logrotate" for details
    3. # rotate log files weekly
    4. weekly
    5. # keep 4 weeks worth of backlogs
    6. rotate 4
    7. # create new (empty) log files after rotating old ones
    8. create
    9. # use date as a suffix of the rotated file
    10. dateext
    11. # uncomment this if you want your log files compressed
    12. #compress
    13. # RPM packages drop log rotation information into this directory
    14. include /etc/logrotate.d
    15. # no packages own wtmp and btmp -- we'll rotate them here
    16. /var/log/wtmp {
    17. monthly
    18. create 0664 root utmp
    19. minsize 1M
    20. rotate 1
    21. }
    22. /var/log/btmp {
    23. missingok
    24. monthly
    25. create 0600 root utmp
    26. rotate 1
    27. }
    28. # system-specific logs may be also be configured here.
    这里的设置可以理解为Logrotate的缺省值,当然了,可以我们在「/etc/logrotate.d」目录里放置自己的配置文件,用来覆盖Logrotate的缺省值。

    Logrotate的演示

    按天保存一周的Nginx日志压缩文件,配置路径为:/etc/logrotate.d,创建一个nginx的文件
    1. /usr/local/nginx/logs/*.log {
    2. daily
    3. dateext
    4. compress
    5. rotate 7
    6. sharedscripts
    7. postrotate
    8. kill -USR1 `cat /var/run/nginx.pid`
    9. endscript
    10. }
    如果你等不及CRON,可以通过如下命令来手动执行:
    1. [caoxiaojian@web1 etc]$ logrotate -f /etc/logrotate.d/nginx
    当然,正式执行前最好通过Debug选项来验证一下,这对调试也很重要:
    1. [caoxiaojian@web1 etc]$ logrotate -d -f /etc/logrotate.d/nginx

    参数 功能

    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 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).

    Logrotate的疑问

    问题:sharedscripts的作用是什么?

    大家可能注意到了,我在前面Nginx的例子里声明日志文件的时候用了星号通配符,也就是说这里可能涉及多个日志文件,比如:access.log和error.log。说到这里大家或许就明白了,sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。

    官方配置解析















  • 相关阅读:
    Oracle Database 11g : SQL 基础
    Idea-Java接入银联支付的Demo
    Linux文件系统挂载管理
    Linux文件系统
    使用fdisk进行磁盘管理
    Vim文本编辑器
    Linux系统常用命令
    Linux系统目录架构
    Linux文件基本操作管理
    Linux文件系统的基本结构
  • 原文地址:https://www.cnblogs.com/caoxiaojian/p/5688441.html
Copyright © 2011-2022 走看看