关机时间太长的调查和解决的方法
当你关闭linux系统时,它会发送终止信号(sigterm),并礼貌地要求正在运行的进程停止。有些进程不符合该行为,它们会忽略终止信号并继续运行。
这可能会导致关机过程的延迟,因为你的系统会在一个预定义的时间段内等待运行的进程停止。在这个时间段之后,它会发送 kill
信号来强制停止所有剩余的运行进程并关闭系统。
事实上,在某些情况下,你会在黑屏上看到一个类似 “a stop job is running” 的信息。
检查哪些进程会导致 Linux 的长时间关机
journalctl -rb -1
// 此命令将显示最后一次关闭 Linux 系统之前的系统日志
journalctl
能让你读取系统日志。使用选项-b -1
可以过滤最后一次启动会话的日志。使用选项-r
时,日志将按时间倒序显示.
没有 journal 日志?
如果没有 journal 日志,请确认你的发行版是否使用 systemd.
即使在一些使用 systemd 的 Linux 发行版上,journal 日志也没有被默认激活。
请确认 /var/log/journal 是否存在。如果不存在,请创建它:
sudo mkdir /var/log/journal
你还应该检查 /etc/systemd/journald.conf
文件的内容,并确保 Storage
的值被设置为自动(auto)
或持久(persistent)
.
你是否在日志中发现可疑的东西?是否有一个进程/服务拒绝停止?如果是,调查一下是否可以在没有副作用的情况下删除它,或者是否可以重新配置它。请不要在这里盲目地去删除东西。你应该对这个进程有所了解.
通过减少默认停止超时来加快 Linux 中的关机速度(快速修复)
关机的默认等待时间通常设置为 90 秒。在这个时间之后,你的系统会尝试强制停止服务。
如果你想让你的 Linux 系统快速关闭,你可以改变这个等待时间。
你可以在位于/etc/systemd/system.conf
的配置文件中找到所有的 systemd 设置。这个文件中应该有很多以 # 开头的行。它们代表了文件中各条目的默认值。
sudo cp /etc/systemd/system.conf /etc/systemd/system.conf.orig
// 在这里寻找 DefaultTimeoutStopSec。它可能被设置为 90 秒。
#DefaultTimeoutStopSec=90s
// 你得把这个值改成更方便的,比如 5 秒或 10 秒
DefaultTimeoutStopSec=5s
保存文件并重启系统,这将帮助你减少linux系统的关闭延迟。
看门狗问题
Linux 有一个名为看门狗的模块,用于监控某些服务是否在运行。它可以被配置为在系统因软件错误而挂起时自动重启系统。
首先检查看门狗是否在运行:
ps -af | grep watch*
如果你的系统正在运行看门狗,你可以在 systemd 配置文件 /etc/systemd/system.conf
中将 ShutdownWatchdogSec
的值从 10 分钟改为更低的值。