You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux logrotate配置PostgreSQL日志未按10KB阈值轮转问题排查

PostgreSQL日志logrotate未触发轮转的排查方案

问题定位

调试模式(logrotate -d)显示满足轮转条件,但实际未执行,说明轮转逻辑本身无问题,问题出在执行触发机制、权限或配置细节上。

逐一排查项

1. 确认logrotate是否自动加载你的配置文件

系统默认的logrotate cron任务(通常在/etc/cron.daily/logrotate)只会扫描/etc/logrotate.d/目录下的配置文件。如果你的logrotate_PostgreSQL.conf放在/etc/根目录,cron不会自动执行它:

  • 解决:要么把配置文件移到/etc/logrotate.d/,要么在/etc/logrotate.conf中添加:
    include /etc/logrotate_PostgreSQL.conf
    

2. 验证权限与执行上下文

  • cron中的logrotate一般以root运行,需确保root对/var/log/PG/目录(至少rwxr-xr-x权限)、postgres.log文件(读写权限)、配置文件(读权限)有足够权限。
  • 若启用SELinux,用ls -Z /var/log/PG/postgres.log检查日志文件上下文,需为var_log_t类可写类型,否则logrotate无法修改文件。

3. 检查logrotate状态文件

logrotate会在/var/lib/logrotate.status(部分发行版为/var/lib/logrotate/logrotate.status)记录上次轮转时间:

  • 搜索你的日志路径,若记录的时间异常(比如远早于当前时间但未轮转),可删除状态文件(下次执行会自动重建),或手动强制轮转测试:
    su postgres -c '/usr/sbin/logrotate -f /etc/logrotate_PostgreSQL.conf'
    
    执行后查看/var/log/PG/是否生成postgres.log.1。

4. 完善logrotate配置的关键参数

确保配置包含适配PostgreSQL日志写入的参数:

/var/log/PG/postgres.log {
    size 10K
    rotate 10
    copytruncate
    su postgres postgres
}
  • copytruncate:复制日志内容到归档文件后截断原文件,避免PostgreSQL持有旧文件句柄导致日志继续写入归档。
  • su postgres postgres:指定以postgres用户执行轮转,规避权限冲突。

5. 查看系统日志找报错

搜索/var/log/messages或/var/log/syslog中的logrotate相关条目,排查是否有权限不足、路径不存在等报错信息。

快速验证流程

  1. 先执行强制轮转命令,确认配置能生成归档日志
  2. 检查配置文件是否被cron任务加载
  3. 核对权限与SELinux上下文
  4. 从状态文件和系统日志定位执行异常原因

内容的提问来源于stack exchange,提问作者Judy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:06:05