Pet*_*ier 6 restore virtualisation ssh postgresql-10
我正在设计一个过程来测试我的 postgresql 10.8 备份,方法是将它们恢复到一次性虚拟机中的随机时间点。不过,我一直无法完全自动化该过程。我在官方文档的第 8 步(第 25.3.4 节)被阻止
- 启动服务器。
执行pg_ctl startover ssh 时,命令会挂起,直到被杀死。如果我直接通过 ssh 连接到 VM 并执行pg_ctl start,则命令会按预期快速返回。
2012 年的这个帖子似乎描述了一个类似的场景。在我的情况,不过Postgres的过程也即使当它是挂呼叫会话被杀死成功启动(可能是9.0.5和10.8之间虽然有所改善?)。
这个 github 问题似乎相关,但遗憾的是,通过用一种我不知道的语言进行了长时间的重写“解决了”,并最终得出结论,它是pg_ctl二进制文件中的一个错误。
如何自动执行第 8 步,以便我可以继续对备份媒体进行后续验证测试?
这是我需要破解的二进制文件中的一个突出错误吗?或者我错过了一个明智的实施?
看起来pg_ctl想要一个真正的输出终端,ssh当您简单地要求它运行命令时,它不会被分配。根据Postgres 手册
在类 Unix 系统上,默认情况下,服务器的标准输出和标准错误被发送到 pg_ctl 的标准输出(不是标准错误)。然后应该将 pg_ctl 的标准输出重定向到一个文件或通过管道传输到另一个进程,例如像 rotatelogs 这样的日志轮换程序;否则
postgres会将其输出写入控制终端(从后台)并且不会离开 shell 的进程组。[...] 可以通过-l将服务器的输出附加到日志文件来更改这些默认行为。建议使用-l或 输出重定向。
因此,您可能需要告诉ssh分配一个终端pg_ctl使用的-t选项(ssh -t somehost "pg_ctl start")或者告诉pg_ctl给不写终端(ssh somehost "pg_ctl start >/dev/null"或ssh somehost "pg_ctl start -l /tmp/start.log ")
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |