延迟/取消 Linux 关机

延迟/取消 Linux 关机

我知道类似的问题在这里被多次回答,我的问题可能看起来很奇怪,但我的情况不同。我想捕获linux关闭命令另一个进程,在 UI 上显示一条消息,并推迟/取消关闭。

情况是这样的: 我们使用虚拟机进行工作(Amazon 工作区)。我们在这台机器上拥有 root 访问权限another people(例如安全人员)。他们another people不尊重我们,当我们在机器上工作时,他们经常重新启动 Linux 工作区。我们使用带有 UI 的应用程序(即 Intellij IDE),有时在终端中工作。不幸的是,这里没有警告我们即将重启的警报。我不知道如何another people延迟或不延迟地重新启动虚拟工作区。

我想要什么:

  1. 在后台运行捕获关闭信号的脚本
  2. 捕捉关机信号它适用于任何应用程序!
  3. 显示 UI 警告(不是终端消息)。
  4. 然后阻止关闭,并允许我们稍后手动重新启动机器。

我知道我可以在 bash 脚本中捕获信号trap并取消信号,shutdown -c但有时为时已晚,信号会在我的脚本执行任何操作之前杀死另一个正在运行的用户进程。

问题是我可以在任何其他进程捕获关闭信号之前以某种方式捕获并取消关闭信号,并按时取消关闭吗?

也许有现有的工具可供使用,可以处理这种情况,但不确定。

another people不管你信不信,我们多次尝试交谈。另一个问题是,当关机发生在工作时间之外时,那么关机也必须推迟,因为我们只是关闭远程桌面并且不保存工作,因为第二天早上我们会回来。

如果您在不同时区工作,如何定义工作时间是另一个问题。

主要问题是如何捕捉关机信号它到达任何应用程序并取消它。

答案1

[C]我是否可以在任何其他进程捕获关闭信号之前以某种方式捕获并取消关闭信号,并按时取消关闭?

这是不可能的。如果他们想关闭它,他们可以告诉内核立即关闭机器并绕过所有用户空间机制(reboot例如使用系统调用),并且没有办法阻止这种情况。

在像您这样的虚拟环境中,情况更加可怕,因为他们可以简单地拆除容器或关闭虚拟机,而您根本不会收到任何通知。

我知道我可以在 bash 脚本中使用 trap 捕获信号

当你捕获这些信号时会发生什么,你是错误的。当正常关闭时,您的 init 系统会发送SIGTERM并最终SIGKILL发送到正在运行的进程。这些只是向您的系统表明系统将立即关闭并且应用程序应该保存其工作。重要的是,这些不是谈判,而是节省工作的指令:即使你 trap SIGTERM,也不会停止或延迟关闭。

一些可以减轻干扰的想法:

  1. 在 IDE 中定期自动保存您的工作。虽然这不能解决意外关闭的问题,但可以最大限度地减少数据丢失。
  2. rsync考虑在本地计算机上工作,并通过或使用 VCS将您的工作与虚拟机同步。这样,即使虚拟机关闭,您仍然可以访问您的工作。

虽然其中一些技术解决方案可能会部分缓解该问题,但它们并没有解决核心问题,即访问机器的不同各方之间缺乏沟通或尊重。如果你阻止他们以一种方式关闭机器,他们无疑会以另一种方式关闭机器。我建议您更多地关注社交解决方案。

答案2

正如评论指出的那样,正确的解决方案是与造成问题的个人交谈。如果失败,请通过管理层升级问题。

然而,只是为了好玩,我确实考虑了如何解决问题,并且我认为您正在设计一个比需要的更复杂的解决方案,具体来说,您可以将以下内容添加到 root .bashrc 中:

alias reboot="killall -9 -u securityguy1 -u securityguy2 -u securityguy3"

由于通常在远程重新启动时收到的唯一消息是您已被踢出计算机,并且上面的命令将踢出所有列出的用户...

再次强调,不要这样做——我不会为你被解雇承担任何责任。

相关内容