yum安装Nginx后需手动配置logrotate实现日志每日切割、保留30天并压缩;配置文件置于/etc/logrotate.d/nginx,含daily、rotate 30、compress及postrotate发送USR1信号等关键项,并通过logrotate -d/-f测试验证。

CentOS/RHEL 系统用 yum 安装 Nginx 后,默认不会自动配置 logrotate,需要手动添加规则实现 Nginx 日志的每日切割、保留与压缩。
确认 Nginx 日志路径
默认情况下,yum 安装的 Nginx(来自 EPEL 或官方源)日志位于:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
可通过以下命令验证:
nginx -t -v 2>&1 | grep conf
或检查主配置:grep "access_log\|error_log" /etc/nginx/nginx.conf,确保路径与 logrotate 配置一致。
创建 logrotate 配置文件
新建配置文件:
sudo vim /etc/logrotate.d/nginx
填入以下内容(适配每日轮转):
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0644 nginx nginx
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}说明关键项:
- daily:每天执行一次切割
- rotate 30:最多保留 30 个归档日志(如 access.log.1.gz ~ access.log.30.gz)
- create 0644 nginx nginx:切割后新建日志文件,权限 0644,属主属组为 nginx
-
sharedscripts + postrotate:所有匹配日志处理完后,只执行一次 reload 操作;
kill -USR1是 Nginx 优雅重开日志的标准信号(无需 reload 配置)
测试与验证
运行以下命令手动测试配置是否语法正确且能执行:
sudo logrotate -d /etc/logrotate.d/nginx
加 -d(debug)可查看详细过程,不实际写文件;确认无报错后,用 -f 强制执行一次:
sudo logrotate -f /etc/logrotate.d/nginx
执行后检查:
- 原日志是否变为空:
ls -lh /var/log/nginx/access.log - 是否生成压缩归档:
ls -lh /var/log/nginx/access.log.* - Nginx 进程是否仍在运行,新日志是否有写入(访问站点后查 access.log 是否有新条目)
确保 logrotate 定时任务已启用
yum 安装的 logrotate 默认通过 cron 每天触发。检查系统级定时任务:
ls /etc/cron.daily/logrotate
该脚本通常由 anacron 或标准 cron 调用。如需确认是否生效,可查看 cron 日志:
sudo tail -n 20 /var/log/cron | grep logrotate
正常情况下,每天凌晨 3–5 点间会自动运行(具体时间取决于 /etc/anacrontab 或 /etc/crontab)。










