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的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。

    官方配置解析















  • 相关阅读:
    X5webview完美去掉分享功能和缓存功能(2)
    bintray 在android3.2上传遇到的问题
    x5webview 自定义全屏界面
    X5webview去掉分享功能和缓存功能
    buglly热更新集成遇到的那些坑
    腾讯x5webview集成实战
    动态权限<三>华为小米特殊机制
    android 判断应用是否在前台显示
    动态权限<二>之淘宝、京东、网易新闻 权限申请交互设计对比分析
    android 图片二维码识别和保存(二)
  • 原文地址:https://www.cnblogs.com/caoxiaojian/p/5688441.html
Copyright © 2011-2022 走看看