手动运行时,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)
Isunattended-upgrades
完全依赖于cron
,如果是,这是否意味着它不应该从脚本运行?
编辑:TLDR。即使配置看起来正确,在 shell 中运行unattended-upgrades
outside也不会升级任何内容。cron
显然这是因为一个单独的cron
工作负责更新包列表。这种行为正确吗?
部分正确
16.04 及更早版本中的无人值守升级确实依赖 cron 来触发组合更新/升级服务。
但是,情况发生了变化:18.04 使用 systemd 计时器而不是 cron。更新和升级的计时器是独立的,可能会相隔数小时。这是包奇迹般出现的最可能(和预期)的原因 - 它们可能是在上次更新后上传/镜像的。
您可以在
unattended-upgrades
shell 提示符下运行该命令,它会执行与由 cron(16.04 及更早版本)或 systemd timer(18.04 及更高版本)触发的完全相同的工作。由于它全部由 systemd 控制,您可以使用任何您想要开始每日更新和升级的触发器 - 您不限于使用内置计时器。例如,您可以在联网后 4 分钟启动它们,或者将计时器设置为在午餐期间的标准时间运行,或者任何您想要的满足您需求的东西。
答案似乎是,一个成功
unattended-upgrade
确实依赖于最近更新的包列表(相当于apt update
)。它依赖于由cron
(check/etc/cron.daily/
,/etc/cron.d/
) 或更可能是systemd
计时器 (dosudo systemctl list-timers
) 来完成。这个包本身不会触发更新,也不会检查包列表是否是最新的。如果不是,它只会在其日志中写入没有要安装的内容。