logrotate配置文件位于/etc/logrotate.conf及其包含的/etc/logrotate.d/目录下,修改后无需重启,由cron每日调用;可通过logrotate -d调试、-f强制执行。

logrotate配置文件写在哪、怎么加载
logrotate不会自动扫描任意位置的配置,它只认固定路径:/etc/logrotate.conf 是主配置,所有/etc/logrotate.d/ 下的文件都会被包含进来。别把配置丢到/usr/local/etc/ 或家目录,它压根不读。
修改后无需重启服务——logrotate本身无守护进程,靠cron每天调用一次。你可以手动测试是否生效:logrotate -d /etc/logrotate.conf(-d 是调试模式,只打印动作不真执行);确认无误再加 -f 强制运行一次:logrotate -f /etc/logrotate.conf。
- 生产环境别直接用
-f,避免和 cron 冲突导致重复切割 - 如果日志路径含空格或特殊字符,必须用引号包裹整个路径
-
include /etc/logrotate.d这行默认就在/etc/logrotate.conf末尾,删了就失效
按大小还是按时间切割?daily weekly monthly rotate的区别
daily、weekly、monthly 控制的是「触发切割的周期」,不是「保留多少份」;真正管保留份数的是 rotate N。比如 daily + rotate 7,意思是每天检查一次,只要当天日志有增长就切,最多留7个归档文件。
但有些服务(如Nginx访问日志)流量不均,可能某天没请求,就不该切;这时用 size 100M 更合理——只要当前日志超过100MB就立即切,无视时间。两者可共存,满足任一条件即触发。
-
size后单位必须是K、M或G(大小写敏感),size 100m会报错 -
daily不等于“每天0点切”,而是“每天cron运行时检查是否该切”,实际时间取决于你的/etc/cron.daily/logrotate - 混合使用
daily和size 50M时,logrotate优先检查 size,满足即切,不等时间点
压缩与旧日志清理的关键参数:compress、delaycompress、missingok
compress 默认用 gzip,切完立刻压缩;但如果你启用了 copytruncate(常见于不能停服务的场景),就得配 delaycompress:本次切出来的不压,等下次切时才压上一轮的——否则刚 truncate 完,程序还在往新文件写,你却立刻 gzip,可能压到空文件或损坏内容。
missingok 很关键:当指定的日志路径不存在(比如服务刚装好还没产生日志),没有它,logrotate 会报错并中断后续所有配置处理;加上它就跳过,不声不响继续。
- 不要以为
compress能省空间就全开——高频小日志(如 debug 级别)压缩反而拖慢 I/O,且解压查看更麻烦 -
compresscmd和compressext可换压缩工具,比如compresscmd /usr/bin/zstd+compressext .zst -
notifempty建议始终加上,空文件不切,避免生成一堆app.log.1→app.log.2的空归档
权限与用户问题:create 0644 www-data www-data 失败的原因
create 参数用于切割后重建原始日志文件,并设权限和属主。但它只在 logrotate 自己创建文件时生效;如果原日志是 root 创建、服务以 www-data 身份追加写入,而你配了 create 0644 www-data www-data,logrotate 会尝试用 www-data 用户去创建文件——失败,因为非 root 用户无法在 /var/log/ 下建文件。
正确做法是:让 logrotate 以 root 身份运行(默认如此),然后用 create 指定目标属主。例如 Nginx 日志通常由 root 启动,但 worker 进程以 www-data 身份写日志,所以应写:create 0644 root www-data,确保文件可被 worker 进程写入。
- 如果服务自己管理日志权限(如 systemd-journald),别乱用
create,可能覆盖其行为 -
su指令可用于切换用户执行脚本(如 postrotate),但不能用于create的属主设置 - 不确定属主时,先查现有日志:
ls -l /var/log/nginx/access.log,照着配
logrotate -d 输出里有没有 warning,尤其注意 “error: skipping” 或 “file not found” 类提示。


















