无人值守升级在手动运行时没有任何发现

无人值守升级在手动运行时没有任何发现

手动运行时,sudo unattended-upgrade发现没有需要升级的内容:

No packages found that can be upgraded unattended and no pending auto-removals

sudo apt update事先的举动却奇迹般地改变了这种情况:

Packages that will be upgraded: ...
...
All upgrades installed

中的配置/etc/apt/apt.conf.d/20auto-upgrades包含APT::Periodic::Update-Package-Lists "1";它应该做的事情。这大概仅由使用cron,这可以解释过时的软件包列表。

此外,手册页上unattended-upgrade写道:

该脚本是 APT::Periodic::Unattended-Upgrade 选项的后端,设计用于从 cron 运行(例如通过 /etc/cron.daily/apt)

是否unattended-upgrades完全依赖于cron,如果是这样,是否意味着它不应该从脚本运行?

编辑:TLDR。unattended-upgrades在 shell中运行cron,即使配置看起来正确,也不会升级任何内容。显然,这是因为有单独的cron作业负责更新软件包列表。这种行为正确吗?

答案1

部分正确

16.04 及更早版本中的无人值守升级确实依赖于 cron 来触发组合更新/升级服务。

然而,情况发生了变化:18.04 使用 systemd 计时器而不是 cron。更新和升级的计时器是独立的,并且可能相隔几个小时运行。这是软件包奇迹般出现的最可能(也是预期的)原因 - 它们可能是在上次更新后上传/镜像的。

您可以从 shell 提示符运行该unattended-upgrades命令,它将执行确切地与由 cron(16.04 及更早版本)或 systemd timer(18.04 及更新版本)触发的作业相同。

由于这一切都由 systemd 控制,因此您可以使用任何触发器来启动每日更新和升级 - 您不必局限于使用内置计时器。例如,您可以在网络启动后 4 分钟启动它们,或者将计时器设置为在午餐期间的标准时间运行,或者任何满足您需求的时间。

答案2

答案似乎是,成功unattended-upgrade确实取决于软件包列表的最近更新(相当于apt update)。它依赖于此是通过cron(check /etc/cron.daily//etc/cron.d/)或更可能是systemd计时器(do sudo systemctl list-timers)来完成的。

此一揽子计划将不是本身不会触发更新,也不会检查软件包列表是否是最新的。如果不是,它只会在日志中写入没有要安装的内容。

相关内容