在关机时以交互方式终止“停止作业正在运行”

在关机时以交互方式终止“停止作业正在运行”

通常,当我关闭机器(使用命令shutdown)时,它会很快工作,但每隔一段时间,通常是在更新失败后或当我破坏某些服务的配置文件时,我最终会得到

某些损坏的服务正在运行停止作业(20 分钟 58 秒/无限制)

在我的屏幕上游行,直到我屈服并按住电源按钮直到机器关闭。有时会有多个作业,其中一个作业实际挂起,其他作业等待挂起的作业,每个作业有 1:30 的超时时间,总计达 20-30 分钟。有时经过长时间的等待后它最终会关闭,有时则不会(或者我失去耐心)。

当我发现这个问题时,我能做些什么来强行终止挂起的内容并允许它继续(半)优雅地关闭吗?主要是,我想确保btrfs始终有机会重新挂载 ro 并刷新到磁盘,因为我正在运行(半不稳定)raid6。我听说 Ctrl+Alt+Delete 应该有帮助,但它似乎所做的只是^[[3~在屏幕底部打印——我需要做些什么才能启用它吗?

明确地说,我是不是尝试去全局关闭或禁用此超时-- 我的系统通常能够在不运行的情况下关闭 -- 我只是想要一种当我发现问题时以交互方式绕过它的方法。另外,不感兴趣为什么会发生这种情况或如何解决——诊断必须等到机器完成关闭并重新启动。


我最近一次遇到这个问题是因为编写了一个 udev 规则,该规则导致了内核恐慌,systemd-udev据我所知,导致永久挂起。由于某种原因,这意味着 docker 挂起 30 分钟,直到关闭本身超时。

.mount当我有一个 systemd单元指向只能通过 VPN 访问的 NFS 共享且 VPN 已失效时,这种情况似乎也经常发生。停止挂载单元将永远挂起,由于某种原因导致我的用户会话和其他 6-8 个单元挂起 1:30(按顺序),直到全部超时。

以前每次我因某种莫名其妙的原因关闭时也会发生这种情况,然后通过内核升级修复了它(5.7。如果我没记错的话,某个东西修复了它)。

答案1

当我发现这个问题时,我能做些什么来强行终止挂起的内容并允许它继续(半)优雅地关闭吗?

根据我的经验,SysRq + REISUB 是 100% 安全的。老实说,我什至使用了更短的版本SysRq + SUB。


笔记:大多数 SysRq 功能在大多数发行版上默认被禁用。要重新启用它们,请创建/etc/sysctl.d/90-sysrq.conf包含以下内容的文件

 kernel.sysrq = 1

这将在下次启动时生效,但要使其立即运行

 sysctl --system

答案2

每当我需要尽快关闭系统时,我都会这样做:

init 0

这是用于停止所有系统进程的运行级别(总共 7 个,编号从 0 到 6)。它从来没有让我失望过。

相关内容