您的 Linux 系统关闭时间太长? 您可以通过以下步骤找出导致延迟关机的原因并解决问题。
我希望你有点熟悉 sigterm 和 sigkill 概念。
当您关闭 Linux 系统时,它会发送 sigterm 并礼貌地要求正在运行的进程停止。 一些进程行为不端,它们会忽略 sigterm 并继续运行。
这可能会导致关闭过程延迟,因为您的系统将等待正在运行的进程停止预定义的时间段。 在此时间段之后,它会发送终止信号以强制停止所有剩余的正在运行的进程并关闭系统。 我建议 阅读 sigterm 与 sigkill 以了解差异.
事实上,在某些情况下,您会在黑屏上看到类似“正在运行停止作业”的消息。
如果您的系统关闭时间过长,您可以执行以下操作:
- 检查哪个进程/服务花费的时间太长,是否可以删除或重新配置它以使其正常运行。
- 更改系统强制停止正在运行的进程之前的默认等待时间。 [Quick and dirty fix]
我在这里使用 Ubuntu,它使用 系统. 此处的命令和步骤适用于任何使用 systemd 的 Linux 发行版(大多数都使用)。
检查哪些进程导致 Linux 中的长时间关机
如果您想弄清楚出了什么问题,您应该检查上次关机时发生了什么。 使用此命令可以获得“我知道你上次会议做了什么”的力量(双关语):
journalctl -rb -1
这 journalctl 命令 允许您阅读系统日志。 使用选项“-b -1”可以过滤上次启动会话的日志。 使用选项“-r”,日志按时间倒序显示。
换句话说,’journalctl -rb -1′ 命令将显示 Linux 系统上次关闭之前的系统日志。 这就是分析Linux中长时间关机问题所需要的。
没有日志记录? 这是你应该做的
如果没有日志日志,请确保您的发行版使用 systemd。
即使在一些带有 systemd 的 Linux 发行版上,日志日志默认也不会激活。
确保 /var/log/journal 存在。 如果没有,请创建它:
sudo mkdir /var/log/journal
您还应该检查 /etc/systemd/journald.conf 文件的内容,并确保 Storage 的值设置为 auto 或persistent。
你在日志中发现可疑的东西吗? 是否有进程/服务拒绝停止? 如果是,请调查是否可以在没有副作用的情况下将其删除,或者是否可以重新配置它。 请不要在这里盲目删除东西。 您应该了解该过程。
通过减少默认停止超时加快 Linux 中的关闭 [Quick fix]
关闭的默认等待时间通常设置为 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
如果您不知道如何在终端中编辑配置文件,请使用此命令在系统的默认文本编辑器(如 Gedit)中打开文件进行编辑:
sudo xdg-open /etc/systemd/system.conf
不要忘记 删除 DefaultTimeoutStopSec 之前的 #. Save 文件并重新启动系统。
这应该可以帮助您减少 Linux 系统的关机延迟。
看门狗问题!
Linux 有一个名为 watchdog 的模块,用于监控某些服务是否正在运行。 如果由于软件错误而挂起,它可以配置为自动重新启动系统。
在桌面系统上使用 Watchdog 并不常见,因为您可以手动关闭或重新启动系统。 它通常用于远程服务器。
首先检查看门狗是否正在运行:
ps -af | grep watch*
如果看门狗正在您的系统上运行,您可以在 systemd 配置文件 /etc/systemd/system.conf 中将 ShutdownWatchdogSec 值从 10 分钟更改为更低的值。
推荐阅读:
了解引导 Linux 系统需要多长时间
你的 Linux 系统启动需要多长时间? 以下是如何使用 systemd-analyze 命令找到它。
你能解决长时间的关机问题吗?
我希望本教程可以帮助您调查和修复系统上的长时间关机问题。 如果您设法修复它,请在评论中告诉我。