通过 ssh 重启时挂起并断开管道

通过 ssh 重启时挂起并断开管道

我正在尝试使用以下命令从另一个盒子重新启动一个盒子:

ssh 10.0.0.26 'reboot --force'

我预计这会阻塞一小会儿,直到另一个盒子重新启动,然后返回。我看到的情况是一段时间内没有任何活动,然后如果我按下一个键,就会出现“写入失败:管道损坏”。

另一个盒子的重新启动工作正如预期的那样,但我想清除本地盒子上的输出,最好不要将其全部隐藏在/dev/null中。

我在 Redhat 6 上使用 OpenSSH 5.3p1。

编辑:我找到了自己的解决方案;我将在下面添加这个答案。不过,似乎我现在还不能接受这一点。我想这是为了让其他人有机会提出更好的解决方案。

答案1

您可以安排重启,而不是立即重启。请查看这个帖子

答案2

有效的线路如下:

ssh 10.0.0.26 'reboot --force >/dev/null &'

最后一条命令&告诉其他系统在后台运行该命令。然而,这还不够,因为 ssh 连接会尝试在任何输出的情况下保持打开状态。因此将 stdout 发送到 null。

答案3

如果您确实想要等到完全重启(例如 ssh 会话终止),则每秒轮询服务器一次,如果 5 次尝试内仍未应答则退出:

ssh -o ServerAliveInterval=1 -o ServerAliveCountMax=5 10.0.0.26 'reboot --force > /dev/null'

[讨论这里向我指出了正确的参数。

相关内容