阻止无人值守升级重新启动计算机

阻止无人值守升级重新启动计算机

我在公共计算机房运行 Ubuntu 14.04,启用了无人值守升级,并配置为在凌晨 02:00 重启。PC 是双启动的,因此用户需要重启计算机才能启动另一个操作系统,但如果 uu 安装了一些更新,并将其设置为重启,则用户将无法自行完成此操作:如果他们单击齿轮图标,然后选择关机并重启,系统将什么也不做。

如果我以 root 身份登录并尝试发出重启命令,答案是“另一个关机已挂起”,因此我必须使用 shutdown -c 来取消它,然后我才能重启。这显然不是我想要的,因为用户应该能够在没有我(或 root)干预的情况下随时重启。

有人能帮助我实现我的目标吗(=将 uu 设置为自动安装,并在凌晨 2 点重新启动,让用户可以在需要时自由重新启动/关闭,而无需授予他们 root 权限)?

非常感谢,

安德里亚

答案1

阻止无人值守升级重新启动计算机

目前,无人值守升级设置为在凌晨 2:00 重启计算机(如果更新需要重启)。此步骤将停止此行为。

步:编辑文件/etc/apt/apt.conf.d/50unattended-upgrades

在文件内查找以下行:

unattended-Upgrade::Automatic-Reboot "true";

并使其看起来像:

Unattended-Upgrade::Automatic-Reboot "false";

创建一个 bash 脚本来检查是否需要重新启动,并在需要时执行重新启动

下面的脚本检查该文件是否reboot-required存在,如果存在,则立即重新启动计算机。我们称此文件为reboot_if_needed.sh

#!/bin/bash
if [ -f /var/run/reboot-required ]; then
        echo $(date) Sytem restart required by: $(cat /var/run/reboot-required.pkgs)
        /sbin/reboot now
fi

将此文件另存为/opt/bin/reboot_if_needed.sh

使此文件可执行:

sudo chmod + x/opt/bin/reboot_if_needed.sh

解释

当脚本运行且文件var/run/reboot-required存在时,它将输出一些将被捕获到日志文件中的文本/var/log/reboot_history.log。然后系统将重新启动。

reboot_if_needed.sh每天晚上 2:00安排

我们希望以管理员权限运行该脚本。因此我们使用。按 ++打开sudo终端并输入:CtrlAltT

sudo crontab -e

此命令将打开 root 用户的 crontab 文件(如果存在),或创建一个空白的新文件。在文件末尾添加以下行:

0 02 * * * /opt/bin/reboot_if_needed.sh >> /var/log/reboot_history.log

如果使用文本文件编辑器,请按+nano退出编辑器。编辑器将提示您保存更改。按然后按选择默认文件名。CtrlXYEnter

解释

中的每一行crontab都有五个时间和日期字段,后面跟着一个命令,后面跟着一个换行符(“\n”)。字段之间用空格分隔。五个时间和日期字段不能包含空格。五个时间和日期字段如下:

  1. 分钟(0-59),
  2. 小时(0-23,0 = 午夜),
  3. 日 (1-31),
  4. 月(1-12),
  5. 工作日(0-6,0=星期日)。

因此,0 02 * * *意味着每天晚上 2:00。

添加到的行crontab将使脚本reboot_if_needed.sh每天晚上 2 点运行。将>>输出重定向到/var/log/reboot_history.log文件。此文件将在第一次crontab运行脚本时创建。

https://help.ubuntu.com/community/CronHowto如何使用 crontab

为什么这有效?

Unattended-Upgrade 显然会延迟重启。例如:

sudo shutdown -r 02:00

上述命令安排在凌晨 2 点重启。当该命令生效时,您会收到消息“另一次关机已挂起”。

我们使用 crontab 来负责在凌晨 2 点启动重启过程,而不是在命令中安排它shutdown。因此,一旦无人值守升级运行,就不会有待处理的关机。任何用户都可以重新启动计算机。

当任何用户重新启动计算机时,/var/run/reboot-required如果文件存在,则系统会将其删除,因为不再需要重新启动。脚本不会在凌晨 2 点重新启动计算机。

希望这可以帮助

相关内容