我有一个连续运行的标准 Ubuntu postgres9.1 安装,我可能不会停止它。
没有针对日志记录目标进行任何具体配置,因此有一个(以某种方式旋转)日志文件 /var/log/postgresqlpostgresql-9.1-main.log。我想,它会抓取进程的标准输出。
我想要的是配置一个不同的文件目标,并且无需重新启动,(对不起,没有收集器,没有系统日志......那些需要重新启动)但是通过重新配置,新的子进程使用该文件。
那可能吗?谢谢你。
我有一个连续运行的标准 Ubuntu postgres9.1 安装,我可能不会停止它。
没有针对日志记录目标进行任何具体配置,因此有一个(以某种方式旋转)日志文件 /var/log/postgresqlpostgresql-9.1-main.log。我想,它会抓取进程的标准输出。
我想要的是配置一个不同的文件目标,并且无需重新启动,(对不起,没有收集器,没有系统日志......那些需要重新启动)但是通过重新配置,新的子进程使用该文件。
那可能吗?谢谢你。
I believe this is relatively simple. Sadly it does require the use of the logging collector which would require a restart to enable. Without that you can't move a log between partitions.
You can configure which log is used in:
/etc/postgresql/<version>/<cluster>/postgresql.conf
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log
Once you change this, you will need to do a service postgresql reload
to get it to pick up the changes.
Perhaps I should be clear here, that the point of this answer is that you can use service postgresql reload
without restarting the server.
我已经修改了我之前的答案,因为正如 Daniel Vérité 指出的那样,如果不使用 ,则无法设置日志文件logging_collector
,该log_filename
选项将被忽略。
旋转是通过“复制截断”完成的。那就是 logrotate 制作文件的副本,然后清空主日志文件。
在这种情况下,我认为您会很幸运,因为服务器会打开日志的文件句柄并仅使用该文件句柄进行写入。这意味着您可以简单地重命名文件mv old_name.log new_name.log
。postgresql 使用的文件句柄绑定到文件本身而不是名称。
这个解决方案确实存在一个问题,当服务器重新启动时,它会在旧名称下创建一个新的日志文件。您将需要进行配置更改,以便在重新启动时继续写入同一位置。