交互式 psql 运行命令时 ssh 连接中断--命令会完成吗?我可以重新连接吗?

交互式 psql 运行命令时 ssh 连接中断--命令会完成吗?我可以重新连接吗?

我使用交互式 psql 对我们的一个数据库运行重新索引。不幸的是,在重新索引仍在运行时 ssh 连接断开了,我愚蠢地没有将 psql 放在屏幕窗口中(我没有意识到它花了多长时间!)

当我能够再次登录机器后,我运行

ps aux | grep REINDEX 

并且输出似乎表明重新索引仍在运行:

postgres  6180 99.9  0.0 774960  4804 ?        Rs   Jun27 3022:02 postgres: postgres my_db_name [local] REINDEX 

在这种情况下,postgres 的预期行为是什么?它会继续运行重新索引直至完成吗?

另外,有什么方法可以重新连接到 psql,以便我可以继续看到重新索引的正在进行的输出?

答案1

REINDEX 可能会在尝试向不再存在的 psql 发送反馈时中止,并且最终会以“客户端断开连接”的形式传播。或者,如果 psql 仍然存在,当其 tty 和 sshd 缓冲区溢出时,它最终会死亡……不过,这可能会使其花费更长时间。

重新连接来查看该命令的输出实际上是不可能的。

答案2

根据我的经验,一旦你的 shell 因空闲活动而终止,这些东西就会消失。

这是您应该使用 GNU Screen 之类的工具的情况之一。使用 GNU Screen,您可以登录服务器,键入screen,然后开始工作。您可以在该屏幕会话中使用以下命令生成其他终端Ctrl+ac,并在它们之间循环Ctrl+anCtrl+AP。要断开与 GNU Screen 的连接,您可以输入Ctrl+广告。要重新连接,您可以登录并运行screen -r

Kuro5hin 的 Howto 可以在这里找到: http://www.kuro5hin.org/story/2004/3/9/16838/14935

相关内容