让无人值守升级在重新启动之前执行检查

让无人值守升级在重新启动之前执行检查

Unattended-Upgrade 可以毫无问题地升级并重启我的机器。但是,我有一个 Python 脚本,它不经常运行,但运行时可能需要几天才能完成。我想在此脚本运行时暂停自动重启。

实现这一目标的最简单的方法是什么?

答案1

您可以使用此文件中的配置(感谢@穆鲁):

/etc/apt/apt.conf.d/50unattended-upgrades

还有这一行:

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

在 shell 中我会这样做:

sudo sed -i 's/^Unattended-Upgrade::Automatic-Reboot "true";$/Unattended-Upgrade::Automatic-Reboot "false";/g' /etc/apt/apt.conf.d/50unattended-upgrades

为此创建一个脚本并在脚本内启动程序。如果已完成,则恢复更改。


或者您可以使用这个文件:

/etc/apt/apt.conf.d/10periodic

还有这一行:

APT::Periodic::Unattended-Upgrade "0";
  • “0”表示禁用
  • “>0” 是以天为单位的时间间隔。

这将禁用整个系统的自动更新。

答案2

我决定创建一个脚本来检查 python 是否正在运行,并相应地创建和删除配置覆盖文件。当然,对正在运行的 python 程序的测试可以更具体,例如使用-f /proc/$(cat something.pid)/status

bash 文件是:

#! /bin/bash
case "$(pgrep -xc python)" in

0) echo "No python running, ok to reboot" >> /root/scripts/pythonCheck.log
   if [ -e "/etc/apt/apt.conf.d/60dontreboot" ]; then
     rm "/etc/apt/apt.conf.d/60dontreboot"
   fi
;;

*) echo "Python is running, shouldn't reboot" >> /root/scripts/pythonCheck.log
   if [ ! -e "/etc/apt/apt.conf.d/60dontreboot" ]; then
     echo 'Unattended-Upgrade::Automatic-Reboot "false"' > /etc/apt/apt.conf.d/60dontreboot
   fi
   ;;
esac

在我的例子中,我已将自动重启时间设置为凌晨 4 点(50unattended-upgrades 中也是如此),因此我添加了一个 crontab 以在凌晨 3:59 执行上述脚本。我很高兴能浪费一分钟的工作时间;我的 python 脚本将在几分钟后开始运行。

crontab 条目是:

59 3 * * * /root/scripts/pythonCheck.sh

相关内容