我有 Ubuntu 16.10,从 16.04 升级而来。发行版升级一段时间后,自动更新不再运行。
我注意到,如果我运行“apt update”,那么几分钟后,更新软件窗口就会正确出现。
好像更新没有按计划进行/自动启动,我需要检查什么?它如何工作?
答案1
如何检查无人值守升级是否有效:
1) 检查 /var/lib/apt/periodic/ 中的时间戳。大多数与 apt 相关的应用程序都会在此处标注其成功运行的时间戳。
以下是示例。您可以看到 uu 于 1 月 30 日 01:38 运行
$ ls -l /var/lib/apt/periodic/ | grep unattended-upgrades
-rw-r--r-- 1 root root 0 Jan 30 01:38 unattended-upgrades-stamp
2) 检查日志。Unattended-upgrades 将所有操作记录到 /var/log。
以下是 1 月 30 日相同活动的示例:
$ cat /var/log/unattended-upgrades/unattended-upgrades.log | grep 2017-01-30
2017-01-30 01:38:22,190 INFO Initial blacklisted packages:
2017-01-30 01:38:22,254 INFO Initial whitelisted packages:
2017-01-30 01:38:22,254 INFO Starting unattended upgrades script
2017-01-30 01:38:22,255 INFO Allowed origins are: ['o=Ubuntu,a=yakkety-security']
2017-01-30 01:38:26,336 INFO No packages found that can be upgraded unattended and no pending auto-removals
如何检查无人值守升级下次运行的时间:
在 Ubuntu 12.04 和 14.04 中,无人值守升级与由 /etc/cron.daily 触发的其他日常维护一起运行。查看您的 root crontab 以了解其每天运行的时间。
在 Ubuntu 16.04 及更高版本中,每日 apt 维护由 systemd 分配一个随机时间。
下面是一个如何查询 systemd 来查看每日 apt 计时器(巧妙地称为“apt-daily.timer”)的示例:
$ systemctl list-timers apt-daily.timer
NEXT LEFT LAST PASSED
Tue 2017-01-31 10:12:03 CST 4h 49min left Mon 2017-01-30 19:18:19 CST 10h ago
请注意,1 月 30 日(19:18)的最后一个计时器不是与 1 月 30 日 (01:30) 的实际运行时间相匹配。系统在 01:30 被暂停或关闭,当系统再次可用时,systemd 会运行错过的计时器。还请注意,NEXT 计时器与前一天无关...每一天都是随机的。
这种随机性意味着,一个不总是在线的系统很可能每周会错过几次日常升级。这不会损害您的系统,但可能会让用户感到困惑。
等一下,没有时间戳。如何启用无人值守升级?
在 Ubuntu 14.04 及更早版本中,无人值守升级已安装但默认处于关闭状态。
在 Unity 14.04 及更早版本中,打开它的简单方法是系统设置 --> 软件和更新 --> 更新选项卡。设置很容易理解。
如果您没有使用 Unity,请尝试以下步骤并查找“更新”选项卡。
$ software-properties-gtk
16.04 及更高版本的所有版本都默认安装并启用无人值守升级。使用相同方法更改许多设置。
对于需要特殊配置的高级用户,uu 设置存储在 /etc/apt/apt.conf.d/ 中的各种文件中,与其他 apt 设置混合在一起。GUI 使用这些设置。
好的,无人值守升级正在运行,但为什么我仍然会收到有关未安装更新的通知?
uu 的默认设置(位于 /etc/apt/apt.conf.d/50unattended-upgrades)是仅从 -security 存储库下载和安装软件包。-upgrades 和 -backports 以及其他所有内容都将被忽略...并且您将收到通知,告知您这些未安装的升级可供您手动批准。
您可以编辑该文件(作为 sudo)以添加其他源。
警告:无人值守升级并不聪明。如果你愚蠢地添加会破坏系统的源(如 -proposed 或某些 PPA),它就会这样做。你已被警告。