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