Ubuntu 16.04:无人值守升级会随机运行


15

我已经配置了无人值守升级来安装安全软件包,并在安装时通过邮件通知。

我注意到安装是在非常随机的时间进行的。我知道最新版本从cron.daily执行时间开始最多增加30分钟的随机延迟。

但是,我遇到的延误要比这大得多。我看到在上午9点,下午3点,12点执行无人值守的升级...日志显示的内容相同,因此不仅仅是电子邮件传递需要更长的时间。

无人值守的升级任务是cron.daily中的第一个任务,这意味着没有以前的任务具有巨大的执行时间。

有人经历过类似的事情吗?


随机行为是有意为之的-平滑需求,而不是每天数百万的系统在同一时间锤打几个镜子。普通桌面用户根本不应该注意到该行为。一些企业用户希望将行为更改为更可预测的方式,当然欢迎这样做。
user535733 '19

是的,这种选择背后的原因很明显。只是这种行为对于生产系统是不可接受的。在我问这个问题的时候,这种行为(和解决方法)在任何地方都没有得到记录
丹尼尔·F。

Answers:


20

调试之后,我找到了解决方案。

此问题的根本原因在于以下事实:在Ubuntu 16.04及更高版本中,无人值守的升级使用systemd而非cron来安排更新,并且产生了巨大的随机延迟:

/lib/systemd/system/apt-daily.timer 配置有

OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h

这意味着它将每天运行两次,分别在6:00和18:00,最多随机延迟12小时。由于这在生产环境中并不总是可以接受的,因此我不得不覆盖这些设置。

为了保持程序包配置文件不变,我在/etc/systemd/system/apt-daily.timer.d/override.confUpdate:)中定义了我的替代项(请参阅此答案底部的编辑,以获取有关文件名和位置的更多信息,因为它似乎可能会稍作更改)。

我在那里

[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h

可以在6:00进行无人值守的升级,外加最多一个小时的随机延迟。

然后,我只是使用重启了计时器systemctl restart apt-daily.timer(最终需要重新加载守护程序)。

无人值守更新现在可以在可预测的时间运行!

编辑:似乎对于Ubuntu 18.04事情有所改变。现在应该将替代存储在其中/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf,如下所示:

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h

@PerlDuck在下面的注释中提到了一种使用正确的名称和位置创建覆盖文件的方法。与其手动创建文件,不如考虑运行sudo systemctl edit apt-daily.timer


1
为什么要先清除OnCalendar?
jarno 2016年

2
因为否则,它只会在凌晨6点添加一个新计时器,同时也保留现有计时器。由于我希望无人值守的升级只能在6进行,因此我需要先清除计划。
丹尼尔·f。

我还添加了“ OnBootSec = 5min”以启用启动后的运行,但是它不起作用。(还添加了OnUnitActiveSec = 12h,因此它不会运行得太频繁。)
jarno

systemd,或者更确切地说,systemd的心态再次出现。这个宝石咬了我之后,我可能不得不重新考虑升级到生产中的Xenial Xerus。

2
@丹尼尔f。我在/ lib / systemd / system /中有一个apt-daily.timer文件,在/etc/systemd/system/timers.target.wants/中有一个apt-daily.timer文件,但是在/ etc / systemd / system /中没有任何文件本身就像你。您是否知道我是否应该在/ lib / systemd / system下创建apt-daily.timer.d目录和override.conf?所有的建议,请与thx一起感谢。
Purvez

6

https://wiki.debian.org/UnattendedUpgrades上的官方debian文档当前存在一个错误,它误导了很多人。它声称您可以通过创建一个名为的文件来覆盖升级时间

/etc/systemd/system/apt-daily-upgrade.d/override.conf

但是正确的路径是

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf

2
好发现。恕我直言,最安全的事情是使用sudo systemctl edit apt-daily.timer。这将打开带有正确的插入文件的编辑器。
PerlDuck

2
谢谢PerlDuck,我根据您的建议编辑了Debian Wiki页面
Rolf Wojtech,

认为此答案有用–并更新了Debian Wiki页面!
Anthony Geoghegan

5

我尝试了Daniel的解决方案,但升级仍在错误的时间进行。原来有两个需要的系统覆盖:

用于下载

/lib/systemd/system/apt-daily.timer-用/etc/systemd/system/apt-daily.timer.d/override.conf覆盖

用于升级

/lib/systemd/system/apt-daily-upgrade.timer-用/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf覆盖


1
您使用的是哪个版本?因此,您必须同时覆盖两个提到的计时器吗?
丹尼尔·f。

Ubuntu 16.04.4 x64
Niels Rask,
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.