logrotate 的配置文件需要放到 /etc/logrotate.d/ 目录里,这一步不能放错。原因很直接:cron 实际上只会通过 /etc/cron.daily/logrotate 去调用 /etc/logrotate.conf,而后者又是靠 include /etc/logrotate.d 来加载具体配置的,换到其他路径,系统默认并不会识别。针对 Nginx 日志,通常要配上 daily、dateext、dateyesterday 和 dateformat -%Y-%m-%d,另外还得在 postrotate 里使用 kill -USR1 做安全重载,这样日志切分后服务本身也能平稳接管新文件。

如何在Linux中配置具体的日志文件自动切分

必须把配置文件放到 /etc/logrotate.d/ 目录下,否则 cron 永远不会执行它。

logrotate 配置文件该放哪儿、怎么加载

logrotate 并不会去“满系统乱找”配置,它实际上只看两个固定位置:/etc/logrotate.conf(主配置文件)和 /etc/logrotate.d/ 目录下的所有配置。系统每天会通过 /etc/cron.daily/logrotate 这个脚本执行 logrotate /etc/logrotate.conf,而主配置里默认又写着 include /etc/logrotate.d。说白了,Nginx、MySQL 这类服务的日志轮转配置之所以要放进这个目录,原因就在这里。

常见错误:

如何为 Nginx 日志配置按天切分并带日期后缀

关键不是只加 dateext,而是要配合 dailydateyesterday 才能生成形如 access.log-2026-07-08 的文件名(即“昨天”的日期,语义更准确)。

示例配置(写入 /etc/logrotate.d/nginx):

/var/log/nginx/*.log {
daily
dateext
dateyesterday
dateformat -%Y-%m-%d
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
pidfile=$(nginx -t 2>&1 | grep "pid" | awk '{print $NF}')
[ -f "$pidfile" ] && kill -USR1 $(cat "$pidfile")
endscript
}

注意点:

按大小切分 vs 按时间切分,怎么选参数

如果日志增长不均匀(比如白天流量大、夜间几乎为零),单靠 daily 可能某天白切一次空文件;这时应优先用 size 触发,例如 size +50M(单位必须大写 M,小写 m 会报错)。

两者可以共存:

调试和验证配置是否生效

别等第二天看效果,先本地验证:

最容易被忽略的是 missingok:Nginx 刚装好还没产生日志时,没有它,整个 logrotate 任务会中断,后续所有配置都不执行。

本文转载于:https://www.php.cn/faq/2992550.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。