Postgresql
當 logrotate 旋轉 postgresql 日誌文件時,PostgreSQL 將停止記錄
我已經安裝
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 在配置文件中尋找變化。但如果有比觸摸配置文件更好的解決方案,我會很高興。
如果您可以接受失去日誌數據的小風險,您可以嘗試使用logrotate
copytruncate
指令。
PostgreSQL 打開舊的日誌文件並繼續寫入。重命名文件不會改變這一點。
嘗試添加一個
postrotate
呼叫的命令pg_ctl reload -D /path/to/datadir
或使用其他方式向郵局局長發送信號 1。