nginx日志切割遇到的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx日志切割遇到的问题相关的知识,希望对你有一定的参考价值。

背景:为了避免日志文件过大不方便查看,准备对日志切割,我用的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日志切割遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

Nginx:Nginx日志切割方法

nginx 日志切割

切割nginx日志

Nginx日志切割

Nginx日志切割

nginx之自动日志切割--请注意这里不是脚本