欢迎访问linux宝典,请记住本站唯一域名:www.linuxbaodian.com

logrotate进行nginx的日志轮转

来源:原创    更新时间:2018-08-26 19:00:18    编辑:管理员    浏览:1725

logrotate是linux下自带的日志轮询工具。默认情况下,在/etc/cron.daily/目录下有一个logrotate脚本,我们只要把nginx的轮询脚本放在/etc/logrotate.d/下即可。

# cat /etc/logrotate.d/nginx/usr/local/nginx/logs/*.log {daily
missingok
rotate 7compress
delaycompress
notifempty
sharedscripts
postrotate
   kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`endscript}


注:同样可以发送HUP信号来达到日志轮询,即:/bin/kill -HUP `/bin/cat /usr/local/nginx/logs/nginx.pid`

具体每行的参数说明如下:


解释下每行的含义:
1. 指定nginx的日志路径,可以通过 * 通配,可以指定多个文件名
2. 每天执行一次日志轮询
3. 即使日志不存在也继续执行
4. 保留7个备份
5. 开启日志压缩
6. 在下一次轮询时再进行日志压缩
7. 文件日志为空时不进行轮询
8. 有多个日志需要轮询时,只执行一次脚本
9. 最后三行表示日志轮询之后要执行的脚本。postrotate/prerotate和endscript必须成对,缺一不可。


如果想在日志后面加上日期,可以在上面再增加dateext参数:


dateext:日志rotate后再后面加日期,例如:access.log轮转后会变为access.log-20130803

测试配置是否生效,可以使用如下命令测试:

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


看看/usr/local/nginx/logs/下面是否有类似access.log-20130804的log生成 。

后记:

据说下面的脚本也可以实现,未具体验证:

#cat /etc/logrotate.d/nginx/logs/nginx/error.log/logs/nginx/image.361way.access.log/logs/nginx/www.361way.access.log{
        daily
        missingok
        rotate 30
        start 1
        compress
        copytruncate
        notifempty
        sharedscripts
        postrotate          /usr/bin/killall -HUP syslogd 2> /dev/null || true
          create 0640 root root
        endscript}

上一篇:yum仓库

下一篇:linux上安装Docker入门

评论区

表情

共1条评论
  • ntserver

    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:在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
    sharedscripts:所有的日志文件都轮转完毕后统一执行一次脚本
    daily:指定转储周期为每天
    weekly:指定转储周期为每周
    monthly:指定转储周期为每月
    rotate count:指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
    size size:当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB
    命令参数说明

    # logrotate –help
    Usage: logrotate [OPTION...] <configfile>
    -d, --debug 调试模式,输出调试结果,并不执行。隐式-v参数
    -f, --force 强制模式,对所有相关文件进行rotate
    -m, --mail=command 发送邮件 (instead of `/bin/mail')
    -s, --state=statefile 状态文件,对于运行在不同用户情况下有用
    -v, --verbose 显示debug信息
    logrotate配置文件一般在:

    /etc/logrotate.conf 通用配置文件,可以定义全局默认使用的选项。
    /etc/logrotate.d/xxx 自定义服务配置文件

    新建一个/etc/logrotate.d/nginx来分割nginx日志

    /usr/local/nginx/logs/*.log { #指定日志文件位置,可用正则匹配
    daily #调用频率,有:daily,weekly,monthly可选
    rotate 5 #一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
    sharedscripts #所有的日志文件都轮转完毕后统一执行一次脚本
    postrotate #执行命令的开始标志
    if [ -f /usr/local/nginx/logs/nginx.pid ]; then
    kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    #不是中止Nginx的进程,而是传递给它信号重新生成日志,如果nginx没启动不做操作
    fi
    endscript #执行命令的结束标志
    }
    默认logrotate是通过crontab定期执行的,我们也可以手动执行查看结果:

    # logrotate -vf /data/log/nginx/access.log
    验证是否执行,查看cron的日志即可

    # grep logrotate /var/log/cron

    2018-08-26 18:55:13 回复

相关内容

点击排行

随机新闻

评论排行榜