我正在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
。