手动运行时,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
)来完成的。
此一揽子计划将不是本身不会触发更新,也不会检查软件包列表是否是最新的。如果不是,它只会在日志中写入没有要安装的内容。