码迷,mamicode.com
首页 > 其他好文 > 详细

nginx日志切割遇到的问题

时间:2018-11-19 20:03:57      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:为什么   exp   usr   表示   配置   nginx   开始   执行时间   rip   

背景:为了避免日志文件过大不方便查看,准备对日志切割,我用的linux系统自带的logrotate进行切割,具体切割参数请查询logrotate相关资料,下面只写出切割的配置,也是网上参考别人的文章的方法,但遇到了问题

新建文件
vi /etc/logrotate.d/nginx.log
/日志所在路径/*.log
{
daily
rotate 60
dateext
create 644 root root
postrotate
/bin/kill -HUP cat /opt/phpad/var/run/nginx.pid 2> /dev/null 2> /dev/null || true
endscript
}

问题:1.无法控制每天切割的时间,默认都是在夜里3点多
2.日志切割之后,文件是生成了,可总是大小为0,发现nginx.pid丢失,为什么会丢失,开始思考这个问题

解决方法:经过多方查找资料

  1. 下面文件可以设置计划任务的执行时间,logrotate是每天轮转的,可以设置为24点轮转
    cat /etc/anacrontab
    RANDOM_DELAY=45 #最大延迟时间,改成0
    START_HOURS_RANGE=3-22 #只在03到22点之间执行,改成24
    1 5 cron.daily nice run-parts /etc/cron.daily
    #每天都执行/etc/cront.daily/目录下的脚本文件,logrotate的脚本就在这个文件下,大家一定要自己去确认,才能真正明白

真实的延迟RANDOM_DELAY+delay。这里的延迟是5分钟,加上上面的RANDOM_DELAY,所以实际的延迟时间是5-50之间,开始时间为03-22点,那么一般就是在03:05-03:50之间执行。
如果RANDOM_DELAY=0,那么表示准确延迟5min,即03:05执行
这就是为什么总是在3点多切割的原因

2.调用nginx -s reopen用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中
这样完成了日志的切割工作, 同时切割过程中没有日志的丢失。
kill -USR1 等于 nginx -s reopen

切割成功的配置
{
daily
rotate 60
dateext
create 644 root root
postrotate
if [ -f /export1/logs/nginx.pid ]; then
kill -USR1 cat /export1/logs/nginx.pid
fi
endscript
}

nginx日志切割遇到的问题

标签:为什么   exp   usr   表示   配置   nginx   开始   执行时间   rip   

原文地址:http://blog.51cto.com/12107094/2318611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!