Skip to content

Nginx logrotate 日志切割

执行命令

!> 根据配置文件实际路径修改以下命令

shell
logrotate -d -f /etc/logrotate.d/nginx
# 调试模式测试是否有 error 错误
logrotate -f /etc/logrotate.d/nginx
# 执行

配置文件

?> 参考以下示例:
修改日志路径.
修改olddir切割后存储路径.
如果定时计划0点执行,还需要dateyesterday参数自动命名前一天日期.
根据实际环境修改postrotate命令热加载nginx服务生成新日志文件.

dnmp 参考示例

shell
/root/dnmp/logs/nginx/*.log {
    create 0664 root
    olddir /root/backup/logs/nginx
    dateyesterday
    daily
    dateext
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        docker exec nginx nginx -s reload
    endscript
}

lnmp 参考示例

shell
/home/wwwlogs/*.log {
    create 0664 root root
    su root root
    olddir /root/backup/logs/nginx
    dateyesterday
    daily
    dateext
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /usr/local/nginx/logs/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

计划任务

系统/etc/cron.daily目录下的logrotate脚本会在每天执行日志切割任务.
logrotate 读取/etc/logrotate.conf主配置文件,以及/etc/logrotate.d/中的配置文件.
可以在/etc/logrotate.d/中创建nginx配置文件来进行每日切割任务.
但是由于cron.daily并不是每日0点准时执行,如果需要精确按日切割日志,不要在以上/etc/logrotate.d/目录中创建配置文件,选择其他目录创建nginx配置文件,在由crontab来定时执行计划任务.

crontab

参考示例

shell
0 0 * * * /usr/sbin/logrotate -f /your-config-path/nginx >/dev/null 2>&1

!> 再次提醒cron.daily根据不同系统版本是在每日04点左右执行,如果由crontab来精确计划切割任务,则不要在/etc/logrotate.d/目录中创建配置文件,避免重复切割任务.