如何确保sshd是在关机期间要停止的最后一个服务?

我注意到,当我发出reboot命令时,我的SSH连接在CentOS 7上立即closures。这并不意味着服务器已经重新启动,因为我仍然可以ping通它。

看来systemd太早杀死sshd了。 有时服务会停滞不前,或者速度很慢,即使服务器启动,我也无法再login来validation是什么错误。

有没有办法告诉systemd在所有其他服务closures后才杀sshd?

即使可以确保SSH是最后一个要closures的服务,也是毫无意义的,因为一旦networking服务停止,您将失去连接。

一台启动所有服务的Linux机器,首先是最重要的服务,系统日志,防火墙,networking以及最终需要networking访问的应用程序(服务器Web,服务器SSH等)。 closures时,这些服务将以相反的顺序停止。 所以你几乎会立即失去SSH连接。

SSH已经closures,而您仍然可以ping远程机器的事实是正常的。

这有点破解,但添加如下内容呢?

 ExecStopPre=sleep 60 

/usr/lib/systemd/system/sshd.service的“[Service]”部分? 这并不能保证closures的顺序,但是如果你可以容忍更长的closures时间,它可能会让你的shell保持足够的活动时间来validation其他所有的东西终止了,或者做一些快速的动作。 不知道这在一般情况下是否有帮助,因为无论如何在此阶段放弃有问题的关机可能已经太晚了,但是在您尝试debugging的关机期间遇到反复出现的问题的情况下,这可能会非常有用。

我不确定你在这里之后是什么,但是人们会想到的第一件事就是重整这个过程。

所以在你的情况下,你可以renice sshd父进程:

  renice PRIO_MAX -p pid-of-sshd