Logrotate配置nginx日志切割

发布时间:2026/6/5 20:30:25
Logrotate配置nginx日志切割
一、Logrotate介绍logrotate是Linux系统下的一个日志管理工具用于简化系统日志文件的管理。它可以自动对日志文件进行轮转、压缩、删除和邮件通知等操作根据时间或文件大小触发处理防止日志文件过大。通过配置文件设置规则通常由cron定时任务触发执行。二、配置详解1.主配置文件[roottest etc]# vim /etc/logrotate.conf # see man logrotate for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # 自定义的日志轮转配置都放在这里本次以nginx为例 # no packages own wtmp and btmp -- well rotate them here /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }2.创建nginx轮转配置[roottest etc]# cd /etc/logrotate.d/ [roottest logrotate.d]# vim nginx /opt/web_app/nginx-1.16.1/logs/*.log { daily missingok # size 100M rotate 14 dateyesterday dateext dateformat -%Y-%m-%d-%s compress delaycompress notifempty create 640 nginx nginx sharedscripts postrotate if [ -f /opt/web_app/nginx-1.16.1/logs/nginx.pid ]; then kill -USR1 cat /opt/web_app/nginx-1.16.1/logs/nginx.pid fi endscript }3.配置详解/opt/web_app/nginx-1.16.1/logs/*.log # 想切割的日志绝对路径daily # 切割时间频率可选值dailyweeklymonthlyyearlymissingok # 日志不存在不报错size 100M # 当日志到达此大小后切割一般情况下与时间频率冲突rotate 14 # 保留过去14天的日志dateyesterday # 切割完后保存时间是前一天这个配置在nginx的轮转配置中相当重要dateext # 以时间为后缀命名dateformat -%Y-%m-%d-%s # 定义切割日志的后缀该参数要配合dateext使用单独配置不生效compress # 启用gzip压缩delaycompress # 下次轮转时压缩文件notifempty # 空日志文件不切割create 640 nginx nginx # 创建新文件时的权限、所有者和所属组sharedscripts # 确保在匹配到多个日志文件时postrotate脚本只执行一次这个配置在nginx日志轮转中非常重要可避免nginx多次重新加载postrotate # 重新打开日志的脚本if [ -f /opt/web_app/nginx-1.16.1/logs/nginx.pid ]; thenkill -USR1 cat /opt/web_app/nginx-1.16.1/logs/nginx.pidfiendscript4.检查配置文件[roottest logrotate.d]# logrotate --debug /etc/logrotate.d/nginx reading config file /etc/logrotate.d/nginx Allocating hash table for state file, size 15360 B Handling 1 logs rotating pattern: /opt/web_app/nginx-1.16.1/logs/*.log after 1 days (14 rotations) empty log files are not rotated, old logs are removed considering log /opt/web_app/nginx-1.16.1/logs/access.log log does not need rotating (log has been rotated at 2026-5-27 11:15, that is not day ago yet) considering log /opt/web_app/nginx-1.16.1/logs/error.log log does not need rotating (log has been rotated at 2026-5-27 10:0, that is not day ago yet) not running postrotate script, since no logs were rotated上面的检查是没有问题的现在我们修改一个值看看错误的是什么样的[roottest logrotate.d]# vim nginx # create 640 nginx nginx create 840 nginx nginx # 把640权限改成840再debug [roottest logrotate.d]# logrotate --debug /etc/logrotate.d/nginx reading config file /etc/logrotate.d/nginx error: /etc/logrotate.d/nginx:12 extra arguments for create error: found error in /opt/web_app/nginx-1.16.1/logs/*.log , skipping removing last 1 log configs Allocating hash table for state file, size 15360 B Handling 0 logs # debug提示 文件第12行有错误三、定时执行第二部分介绍了logrotate的配置有了配置之后就可以执行了但如何执行呢我们可以直接在crontab里面配置精确的执行时间和命令1.配置crontab[roottest etc]# vim /etc/crontab SHELL/bin/bash PATH/sbin:/bin:/usr/sbin:/usr/bin MAILTOroot # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 0 0 * * * root logrotate -f /etc/logrotate.d/nginx直接写入/etc/crontab配置文件nginx轮转配置已经放在logrotate下了而且logrotate会自动周期性执行那么为什么一定要在crontab里面配置2.浅谈anacrontab 和 crontabanacrontab是周期性补偿调度适合可能关机或不常运行的设备crontab 是精确时间点调度器适合服务器常年开机的场景简单来说anacrontab是crontab的补偿方案anacrontab并不会很准时的执行如果想在每天0点0分执行切割那么建议还是选择crontab。具体区别如下特性crontabanacrontab全称Cron TableAnacron Table设计初衷在确切的时间点执行任务确保任务在指定周期内至少执行一次适用场景服务器、24/7 运行的系统笔记本电脑、偶尔关机的桌面系统时间精度精确到分钟如每天 02:00粗略周期如每 1 天、每 7 天是否依赖系统持续运行是若关机则错过任务否开机后检查并补执行配置文件位置/var/spool/cron/或/etc/crontab/etc/anacrontab典型用途备份、日志轮转、监控脚本系统维护、更新检查、清理临时文件※所以需要配置准确时间执行任务时还是选择crontab配置比较稳妥