首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pg_ctl挂在ssh上

pg_ctl挂在ssh上
EN

Database Administration用户
提问于 2019-07-17 10:54:51
回答 1查看 736关注 0票数 6

我正在设计一个进程来测试postgresql 10.8备份,方法是将它们还原到一个丢弃虚拟机中的随机时间点。不过,我一直无法完全自动化这一过程。我在正式文件的第8步(第25.3.4节)被阻止

  1. 启动服务器。

当在ssh上执行pg_ctl start时,命令会挂起,直到它被杀死。如果我直接将ssh放到VM上并执行pg_ctl start,那么该命令就会像预期的那样快速返回。

2012年这条线从年开始似乎描述了类似的场景。然而,在我的例子中,postgres进程确实成功地启动了,即使调用会话在挂起时被终止(可能是9.0.5到10.8之间的改进吗?)

这个github问题似乎是相关的,但不幸的是,用一种我不知道的语言进行了长时间重写,最终“解决了”,并得出结论,这是pg_ctl二进制文件中的一个bug。

大问题

如何使步骤8自动化,以便继续对备份媒体进行随后的验证测试?

在我需要破解的二进制文件中,这是一个出色的错误吗?还是我错过了一个合理的实施方案?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-07-17 15:38:02

看起来,pg_ctl需要一个真正的输出终端,当您只要求它运行一个命令时,它就不会由ssh分配。根据Postgres手册

在类似Unix的系统上,默认情况下,服务器的标准输出和标准错误被发送到pg_ctl的标准输出(而不是标准错误)。然后,应该将pg_ctl的标准输出重定向到文件或管道到另一个进程,如旋转日志程序,否则postgres将将其输出写入控制终端(从后台),并且不会离开shell的进程组。...这些默认行为可以通过使用-l将服务器的输出附加到日志文件来更改。建议使用-l或输出重定向。

因此,您需要告诉ssh使用-t选项(ssh -t somehost "pg_ctl start")为pg_ctl分配终端,或者告诉pg_ctl不要写入终端(ssh somehost "pg_ctl start >/dev/null"ssh somehost "pg_ctl start -l /tmp/start.log ")。

票数 8
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/243075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档