我正在reboot -f远程使用命令来强制重新引导Unix计算机。问题是ssh连接长时间保持活动状态,我不知道为什么?我想在重启机器后立即关闭ssh连接,并返回到我的本地shell。我怎样才能做到这一点?请注意,没有-f标志的重新启动命令不起作用。
Enter。然后例如~.终止会话。 Enter ~?以获得其他人的清单。
我正在reboot -f远程使用命令来强制重新引导Unix计算机。问题是ssh连接长时间保持活动状态,我不知道为什么?我想在重启机器后立即关闭ssh连接,并返回到我的本地shell。我怎样才能做到这一点?请注意,没有-f标志的重新启动命令不起作用。
Enter。然后例如~.终止会话。 Enter ~?以获得其他人的清单。
Answers:
该命令reboot -f从不返回(除非您没有导致重新引导的权限)。在发布时,SSH客户端正在等待做某事,这可能是:
由于SSH服务器进程已终止,因此SSH客户端将不会死,直到计时器启动为止。
如果您运行ssh remotehost 'reboot -f >/dev/null &',那么将发生以下情况:
reboot在后台启动命令。reboot命令使计算机重新引导。但是,这并不可靠:根据时间的不同,步骤3可能会在步骤2之前发生。添加计时器使这种情况不太可能发生:
ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'
要绝对确保服务器端已承诺运行reboot,同时确保在通知客户端已提交之前实际上并未重新引导,则需要从服务器到客户端的附加通知。可以通过SSH连接输出,但是变得很复杂。
(sleep 1 && sudo reboot &) && exit。括号产生一个子进程,该子进程等待一秒钟,然后启动重新启动。但是,主机进程立即终止ssh会话。我不是壳专家,但是到目前为止,这对我还是有用的。
我发现此解决方案对我而言表现最佳。
-o "ServerAliveInterval 2"与您的ssh命令一起使用,如下所示:
$ ssh -o "ServerAliveInterval 2" root@remotehost reboot
所述选项使客户端每2秒通过安全通道戳服务器一次。最终,随着重新启动的进行,它将停止响应,并且客户端将断开连接。
一些答案很接近,但是正确的答案是:
ssh user@192.168.0.130 "nohup sudo reboot &>/dev/null & exit"
说明:
exit作为最后一条命令,因此最后一条命令的状态为0(成功)。您可以根据需要睡个好觉,但这不是必需的stdin和stdout仍然通过SSH连接到虚拟终端,因此连接不会关闭。您需要完成两项额外的操作,以使SSH会话结束并在后台运行命令。
stdout和stderr以/dev/null使他们不被保存SSH会话虚拟终端重定向。这是&>/dev/null一部分。stdin相同的方式重定向到无法读取的文件。那就是shell内置的nohup功能。只有在终端上以各种方式在后台运行命令时,该命令exit才能关闭会话,并且由于虚拟终端上没有任何内容stdin或stdout剩余虚拟端口,SSH将无错误地终止连接。
您是否尝试过以下
# shutdown -r now
我发现在通过测试的某些系统上,reboot命令存在一些问题。再一次,我在shutdown的联机帮助页中找不到与使用-f标志重新启动相同的功能。
如何使用下一个命令退出ssh会话并重新引导系统:
ssh login@host "reboot -f"
之后,只需按Ctrl + C终止ssh。
试试这个命令:
$ reboot -f && exit
reboot -f。