我注意到,当我发出reboot
命令时,我的 SSH 连接在 CentOS 7 上立即关闭。这并不意味着服务器已重新启动,因为我仍然可以 ping 它。
看来 systemd 过早地终止了 sshd。有时服务会卡在关闭状态或运行缓慢,尽管服务器已启动,但我无法再登录以验证问题所在。
有没有办法告诉 systemd 仅在所有其他服务都关闭后才终止 sshd?
答案1
即使您可以确保 SSH 是最后关闭的服务,这也是毫无意义的,因为一旦网络服务停止,您就会失去连接。
启动的 Linux 计算机会按照预定顺序启动所有服务:首先是最重要的服务,然后是系统日志、防火墙、网络,最后是需要网络访问的应用程序(服务器 Web、服务器 SSH 等)。关闭时,这些服务会按相反的顺序停止。因此,您几乎会立即失去 SSH 连接。
当您仍可以 ping 远程机器时,SSH 已经关闭,这是正常现象。
答案2
这有点像 hack,但如果添加类似以下内容的内容会怎样:
ExecStopPre=sleep 60
到 的“[Service]”部分/usr/lib/systemd/system/sshd.service
?这不能保证关机的顺序,但如果您可以容忍更长的关机时间,它可能允许您保持 shell 活动足够长的时间以验证其他所有操作是否正常终止,或进行一些快速检查。不确定这在一般情况下是否有用,因为在这个阶段中止有问题的关机可能为时已晚,但在您尝试调试关机期间反复出现问题的情况下,它可能很有用。
答案3
我不确定你在这里想要做什么,但你首先会想到的是重新优化这个过程。
因此,根据您的情况,您可以重新调整 sshd 父进程:
renice PRIO_MAX -p pid-of-sshd