在Linux中编写logrotate自定义配置需在/etc/logrotate.d/下创建片段文件,如myapp,指定日志路径、轮转策略(daily/rotate 7/compress等),用sharedscripts+postrotate实现服务重载,并通过logrotate -d/-v验证。

在 Linux 中编写自定义的 logrotate 配置文件,核心是创建一个独立的配置片段(通常放在 /etc/logrotate.d/ 目录下),让 logrotate 主配置(通常是 /etc/logrotate.conf)自动包含它。不需要修改主配置文件,也不需要重启服务——logrotate 是通过定时任务(如 cron)定期执行的,你只需确保配置语法正确、路径可读写、权限合理即可。
明确日志路径和轮转需求
先确认你要管理的日志文件或目录,例如:
-
/var/log/myapp/*.log(多个日志文件) -
/opt/app/logs/error.log(单个关键日志)
然后确定基本策略:保留几份?按大小还是按时间轮转?是否压缩?是否通知应用重载?这些将决定配置中的关键选项。
编写标准配置片段
在 /etc/logrotate.d/myapp(文件名任意,但建议见名知意)中写入如下内容:
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644 root root
sharedscripts
postrotate
systemctl reload myapp.service > /dev/null 2>&1 || true
endscript
}
说明关键字段:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
daily:每天轮转;也可用weekly、monthly或size 10M -
rotate 7:最多保留 7 个归档(含当前正在写的) -
compress+delaycompress:压缩旧日志,但最新一轮不压(方便调试) -
create 644 root root:轮转后新建日志文件,并设权限和属主 -
sharedscripts+postrotate ... endscript:所有匹配文件轮转完成后只执行一次脚本(适合 reload 服务) -
notifempty和missingok:避免空日志或路径不存在时报错
验证配置是否有效
不要等 cron 触发,用以下命令立即测试:
-
logrotate -d /etc/logrotate.d/myapp:干运行(dry-run),显示将执行什么操作,不实际改动文件 -
logrotate -v /etc/logrotate.d/myapp:详细模式,执行并输出过程(需确保目标日志存在且有写权限) - 检查
/var/lib/logrotate/status文件,确认该配置已被记录和跟踪
注意:如果日志路径由非 root 用户写入(如 www-data),要确保 create 指定的用户/组能写入目录,或改用 su www-data www-data 切换身份。
常见问题与处理建议
轮转失败常因权限、路径或脚本错误导致:
- “file not found”:确认 glob 路径存在且 logrotate 进程有读取权限(不是写权限)
- “error: skipping"/path": bad file mode":检查
create权限是否合法(如不能设 777) - 应用没重载日志:确保
postrotate中命令路径正确(如用/bin/systemctl)、服务名准确、SELinux/AppArmor 未拦截 - 日志仍在增长不轮转:用
logrotate -d看是否被其他配置覆盖(logrotate 按字母顺序加载/etc/logrotate.d/下文件)
配置生效后无需手动干预,cron 会每天调用 /usr/sbin/logrotate /etc/logrotate.conf,自动加载你的 .d/ 片段。

















