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


8

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

似乎systemd杀死sshd为时过早。有时,服务会因关闭而卡住或变得很慢,即使服务器已启动,我也无法登录以验证问题所在。

有没有办法告诉systemd在所有其他服务都关闭之后才杀死sshd?


8
不是您的问题的答案,而是无助的提醒:所有生产服务器都应具有KVM,远程访问卡或串行电缆访问权限。(尽管取决于关闭停滞的位置,即使那些停顿也可能没有用)
Andrew B

4
这并不容易。systemd积极地与启动和关闭并行。不仅ssh立即被杀死,许多其他服务也被立即杀死,可能包括正在挂起的服务。进入(远程)控制台并进行查看,或在下次启动时检查日志。
迈克尔·汉普顿

也许unix.stackexchange.com的好伙伴会为修改systemd关闭过程提供更好的建议?
奥斯丁2015年

似乎systemd使用了一些基于启动配置的命令来进行关机命令: serverfault.com/questions/618612/…但是参考内容含糊不清,而且时间长,我认为他们将您指向DefaultDependencies-似乎是在说是否需要要启动的东西,在关闭之前,服务不会在它依赖的东西之前关闭。
2015年

Answers:


1

即使您可以确保SSH是最后一个要关闭的服务,也没有意义,因为一旦网络服务停止,您将失去连接。

引导的Linux机器以预定的顺序启动所有服务:首先是最重要的服务,即系统日志,防火墙,然后是网络,最后是需要网络访问的应用程序(服务器Web,服务器SSH等)。关闭时,这些服务将以相反的顺序停止。因此,您几乎会立即失去SSH连接。

在仍然可以ping通远程计算机的同时,SSH已经关闭的事实很正常。


0

这有点hack,但是添加如下内容:

ExecStopPre=sleep 60

到“ [服务]”部分/usr/lib/systemd/system/sshd.service?那不能保证关闭的顺序,但是如果您可以忍受更长的关闭时间,则可以让您的shell保持足够长的活动时间,以验证其他所有内容都可以正常运行,或者可以快速查看一下。不知道这在一般情况下是否有用,因为在这个阶段无论如何中止有问题的关机可能为时已晚,但是在您尝试调试的关机期间反复出现问题的情况下,这可能会很有用。


-5

我不确定您在这之后会做什么,但是首先要考虑的是缩减流程。

因此,在您的情况下,您可以放弃sshd父进程:

       renice PRIO_MAX -p pid-of-sshd

这会将其在CPU调度中的优先级更改为接近实时,但除此之外别无其他。
Falcon Momot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.