“停止作业正在运行”中到底是什么?


28

发出关闭命令后,有时会收到如下状态消息:

A stop job is running for Session 1 of user xy

然后系统挂起一会儿,或者永久挂起,具体取决于???

那么“停止工作”到底是什么呢?

另外,为什么有时有时会准确地估计所需的时间,而有时却可以永远运行呢?


1
也许应该停止工作?会话已停止了实际上没有运行的作业,因此没有机会响应终止信号。
卡兹(Kaz)2016年

Answers:


27

systemd根据“作业”队列在内部进行操作。每个工作(略微简化)都是要执行的操作:停止,检查,启动或重新启动特定单元

例如,当您指示systemd启动服务单元时,它将为实现该目标所需的任何单元(服务单元,安装单元,设备单元等)列出停止和启动作业的列表。单元需求和依存关系,根据单元订购关系对其进行排序,计算出并(如果可能)修复任何自相矛盾的内容,并且(如果最后一步成功了)将其放入队列中。

然后,它尝试执行排队的“工作”。

用户xy的会话1正在运行停止作业

单位显示名称Session 1 of user xy。(根据显示名称)这将是会话单元,而不是服务单元。这是由systemd的logind程序及其PAM插件维护的用户空间登录会话抽象。从本质上和理论上讲,它是该用户在某个地方作为“登录会话”运行的所有进程的分组。

被排队的工作是stop。可能要花很长时间,因为系统化的人将会话挂断与会话关闭错误地混为一谈。他们破坏了前者以使后者起作用,作为回应,一些人改变了系统来打破后者以使前者起作用。有系统的人们确实应该认识到他们是两回事。

在您的登录会话中,您会忽略某些内容,SIGTERM或者一旦看到就会花很长时间终止它SIGTERM。具有讽刺意味的是,前者是某些作业控制外壳的长期行为。终止登录会话的领导人时,他们这些特殊的作业控制炮弹正确的方法是告诉他们,本次会议已经挂了,于是他们终止所有的他们的工作(不同类型的工作,以内部systemd作业),然后终止自己。

实际上,systemd正在等待单元的停止超时,直到诉诸为止SIGKILL。当然,该超时可以按单位配置,并且可以设置为永不超时。因此,为什么人们可能会看到不同的行为。

进一步阅读


1
根据这个答案,unix.stackexchange.com / a / 297318/224025,我们可以更改这次。如果将其更改为零秒,是否安全(或会造成任何伤害)?
GypsyCosmonaut

1
实际上,答案的最后一段以及我为您提供进一步阅读的用户手册已经告诉您有关更改超时的信息。关于0s超时意味着什么以及是否可以安全使用的问题应作为“ 如何提问”的一个问题提出因为这是“停止工作”是什么以及超时为何变化的问题的后续问题。我怀疑这可能是一个好选择。
JdeBP '17

2

这些消息来自systemd,这是一个启动和停止作业的初始化系统。作业可以是守护程序,但也可以完成一些小的任务,例如安装和卸载磁盘,删除/ tmp或在启动时保存和恢复屏幕亮度。systemctl list-units给你的主意。Systemd使用“单位”和“工作”来表示相同的意思。

与一样systemctl stop ...,当一个作业被停止时,一个问题是在声明失败并用SIGKILL信号杀死该作业的进程之前,等待该作业完成的时间。我们真的不愿意使用,SIGKILL除非我们必须这样做,因为它没有机会使流程完全退出。对于某些进程,几秒钟可能是足够的时间来声明故障,对于其他进程,例如数据库,可能需要大量的网络和磁盘I / O,以使作业完全停止,因此我们可以给这些单元几分钟的时间来彻底关闭。

您在关闭时看到的内容等效于systemctl stop $UNIT_NAME需要一些时间才能运行。有一个计数器,显示已过去的秒数和发出SIGKILL之前的最大等待时间,无论关机如何进行。

除非有充分的理由期望延迟很长,否则通常表示某种故障。范围可能是DHCP服务器不响应发布,因此发布操作需要超时,或者是导致守护程序永不退出的某些错误。


“ Systemd使用“单位”和“工作”来表示相同的意思。” 我认为这是不对的:大致来说,“工作”是对“单位”做某事的要求。有关详细信息,请参见@JdeBP的答案。
托马斯


0

“停止作业”是systemd指等待特定“作业”停止的时间,例如等待继续执行之前要完成的某些过程。如果您看到警告消息“正在停止作业...”(等),则从技术上讲,它意味着作业队列中有未决事项。

但是,在深入研究整个系统作业队列之前,请记住,有时这些警告消息是环境因素造成的间接结果(实际上,该消息甚至在其GitHub存储库中被引用为可能的错误)。

例如:我们收到与“停止作业”相关的消息,却无法弄清楚原因……。事实证明,磁盘空间几乎不足,并且开始使操作系统表现异常。

将服务器升级到更大的磁盘,然后重新启动以修复它;)

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.