Sudo reboot -f 挂起

Sudo reboot -f 挂起

当我这样做时sudo reboot -f,服务器重新启动,但终端只显示“正在重新启动”并且不退出。我必须按ctrl-c才能退出。有没有办法让服务器退出而不按ctrl-c?我还必须使用sudo reboot -f

答案1

当您使用时sudo reboot -f,操作系统会执行快速重启:内核执行关闭所需的最少操作,而不会严重损坏文件系统。在快速重启中,正确终止进程(包括sshd)并不重要。调度程序只是停止为进程提供更多执行时间,因为内核专注于快速刷新磁盘缓存和任何其他内核级关闭操作。

(结果,一些文件可能会保持打开状态。但是,在现代日志文件系统中,就文件系统而言,这些问题通常可以通过启动时的快速文件系统检查来修复。但具有重要内部结构的文件(如数据库)可能会处于不一致的状态。如果是这样,他们可能需要特定于应用程序的恢复操作...教训:reboot -f除非绝对必要,否则不要使用。

与此同时,您的远程访问客户端将处于悬而未决的状态:从它的角度来看,服务器发送了最后一条消息“正在重新启动”……然后就没有任何响应。没有 SSH 连接终止,甚至没有 TCP FIN。只有沉默。

客户端将遵循正常的 TCP 重试规则。这可能需要几分钟,在此期间不会发生任何可见的事情……但在这段时间内,客户端系统的操作系统会一次又一次地尝试重新发送远程访问客户端在重新启动命令后可能发送的任何传出数据包。

如果服务器需要很长时间进行自检和重启,则连接最终会超时,因为客户端操作系统的 TCP 堆栈会放弃尝试并向远程访问应用程序报告错误。这通常需要几分钟。

但是,如果服务器快速重启,当它到达再次激活其网络接口的点时,服务器的操作系统将看到来自远程访问客户端的传入数据包。然后,服务器将查阅其新初始化的活动网络连接表,得出结论,没有此类连接的记录,并发回 TCP 重置。只有当您的客户端收到该消息时,它才会报告连接已被强制终止。

答案2

您的服务器在关机过程中遇到问题,请检查 /var/log/messages 和/或 /var/log/syslog 的内容以获取更多信息并更新您的原始帖子。

编辑:我看到你的注释说重启工作正常,但你没有断开与服务器的连接。我会确保你的 SSH 超时设置没有在本地设置得太高:https://bjornjohansen.no/ssh-timeout

相关内容