Postgresql

當 logrotate 旋轉 postgresql 日誌文件時,PostgreSQL 將停止記錄

  • January 10, 2020

我已經安裝

PostgreSQL 10.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.2.1 20180905 (Red Hat 8.2.1-3), 64-bit

並配置:

log_filename = 'postgresql.log'

但我想通過 logrotate 而不是 PostgreSQL 的內部 logrotation 來管理日誌輪換:

#vim /etc/logrotate.d/postgresql

/var/lib/pgsql/data/log/postgresql.log {
   daily
   rotate 7
   compress
   create 0664 postgres postgres
   missingok
   notifempty
   sharedscripts
}

logrotate 按預期工作,但 PostgreSQL 將停止登錄到旋轉/var/lib/pgsql/data/log/postgresql.log文件。唯一的解決方案是systemctl restart postgresql可以放在 logrotatepostrotate/endscript塊內,但如果這是在關鍵生產系統上完成的,我不能這樣做。

你有什麼建議如何在不需要重新啟動 PostgreSQL 的情況下正確地 logrotate PostgreSQL 日誌文件?

謝謝!

更新: 在重新載入 PostgreSQL 期間,它會查找更改。我找到了一種解決方法,如何實現 PostgreSQL 將開始登錄到旋轉的postgresql.log文件 - 我需要修改配置文件,例如註釋掉/修改log_filename然後重新載入 PostgreSQL 並恢復更改並再次重新載入 PostgreSQL。因為 PostgreSQL 在配置文件中尋找變化。但如果有比觸摸配置文件更好的解決方案,我會很高興。

如果您可以接受失去日誌數據的小風險,您可以嘗試使用logrotatecopytruncate指令

PostgreSQL 打開舊的日誌文件並繼續寫入。重命名文件不會改變這一點。

嘗試添加一個postrotate呼叫的命令

pg_ctl reload -D /path/to/datadir

或使用其他方式向郵局局長發送信號 1。

引用自:https://dba.stackexchange.com/questions/251784