linux中配置logrotate按天轮转日志需设daily、dateext、create、missingok、notifempty及sharedscripts;dateext启用日期命名,create指定权限与属主,sharedscripts避免重复通知,-d和-f用于调试与强制执行。

Linux 中配置 Logrotate 按天数周期轮转日志,核心是使用 daily 触发条件,并配合 rotate N 控制保留份数。但仅写 daily 不够——它只决定“何时检查”,真正生效还需权限、归档命名、服务通知等关键细节。
daily 轮转必须配 dateext + create 才能生成带日期的新日志
daily 本身不改变文件名格式。若没加 dateext,轮转后是 access.log.1、access.log.2 这类数字编号;加上后才变成 access.log-2026-10-08 这样的日期后缀,语义清晰、便于归档。
同时,新日志文件需要可写,所以 create 必须指定权限和属主:
-
create 0644 nginx nginx(Nginx 场景) -
create 0640 mysql adm(MySQL 场景)
否则轮转后新日志无法写入,应用可能报错或静默丢日志。
用 missingok 和 notifempty 防止空日志或路径缺失导致中断
-
missingok:配置的路径不存在时不报错,避免整个 logrotate 执行失败; -
notifempty:当日志为空时不触发轮转,节省磁盘和 I/O;
这两个参数建议默认开启,尤其在测试环境或日志写入不稳定的场景下很实用。
多个日志文件共用一份 postrotate 脚本要加 sharedscripts
比如 Nginx 同时管理 access.log 和 error.log,若不加 sharedscripts,logrotate 会为每个文件单独执行一次 postrotate,导致重复发 USR1 信号。正确写法:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
/var/log/nginx/access.log
/var/log/nginx/error.log {
daily
rotate 30
dateext
dateyesterday
create 0644 nginx nginx
missingok
notifempty
sharedscripts
postrotate
kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null || true
endscript
}
注意:dateyesterday 让归档文件名显示“昨天”日期(如今天是 10 月 9 日,归档名是 -2026-10-08),更符合运维直觉。
验证配置是否生效,别只靠 cron 等明天
- 测试语法:
sudo logrotate -d /etc/logrotate.d/nginx(-d 是 debug 模式,不真执行) - 强制立即轮转:
sudo logrotate -f /etc/logrotate.d/nginx - 查看状态记录:
cat /var/lib/logrotate/status | grep nginx,确认最后轮转时间已更新
不复杂但容易忽略










