几个月前我买了一台 VPS,并为其配置了 Ubuntu Server 20.04。据我所知,我没有修改任何系统设置,当然也没有修改任何会影响无人值守升级的东西,因为我确实想要这个。
据我了解,Ubuntu 20.04 默认启用了无人值守升级,因此它每天都会执行 apt update + upgrade 以使系统保持最新状态,而无需用户执行任何操作。
我刚刚发现,在我拥有它的几个月里,它从来没有在我的 VPS 上运行过,所以我的更新已经落后了几个月,我想了解原因。
我查看了 /var/log/apt/history.log.*,其中唯一的条目是我过去几个月运行的明确 apt install 命令。而 /var/log/unattended-upgrades/ 中没有任何内容。
从图中可以看出systemctl status unattended-upgrades.service
,它已经等待 TERM 信号 5 个月才开始运行。(见下文)
系统信息:
$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
Codename: focal
$ uname -a
Linux vps-713122 5.4.0-28-generic #32-Ubuntu SMP Wed Apr 22 17:40:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
无人值守升级正在运行,但正在等待某件事:
$ sudo systemctl status unattended-upgrades.service
● unattended-upgrades.service - Unattended Upgrades Shutdown
Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-11-12 20:46:13 GMT; 5 months 4 days ago
Docs: man:unattended-upgrade(8)
Main PID: 867 (unattended-upgr)
Tasks: 2 (limit: 1111)
Memory: 2.5M
CGroup: /system.slice/unattended-upgrades.service
└─867 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
Nov 12 20:46:13 vps-713122 systemd[1]: Started Unattended Upgrades Shutdown.
190 个软件包已过期:
$ apt list --upgradable | wc -l
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
190
(可升级包示例:#linux-generic/focal-updates,focal-security 5.4.0.72.75 amd64 [可升级自:5.4.0.53.56] Ubuntu 更新日志显示 5.4.0.53.56 的日期为 2020 年 10 月。此后已有十几次更新,最近一次是 4 月 12 日。)
此时,我手动运行“apt upgrade”来更新我的软件包,然后重新启动服务器。当我检查无人值守升级时,它仍然卡住:
$ sudo systemctl status unattended-upgrades.service
● unattended-upgrades.service - Unattended Upgrades Shutdown
Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-04-18 21:23:29 BST; 5min ago
Docs: man:unattended-upgrade(8)
Main PID: 513 (unattended-upgr)
Tasks: 2 (limit: 1110)
Memory: 10.3M
CGroup: /system.slice/unattended-upgrades.service
└─513 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
Apr 18 21:23:29 vps-713122 systemd[1]: Started Unattended Upgrades Shutdown.
答案1
我明白了。根据https://ubuntu.com/server/docs/package-management, “要启用自动更新,请编辑 /etc/apt/apt.conf.d/20auto-upgrades 并设置适当的 apt 配置选项”。
我的系统上不存在此文件。为什么?我不确定。也许我的云提供商修改了他们用于配置的 Ubuntu Server 20.04 映像。也许这是以前版本的无人值守升级包中的一个错误。也许我被黑客入侵了,他们删除了它。我没有足够的动力去调查它。
因此解决方案是创建该文件。两个简单的选项:
- 从默认文件复制:
sudo cp /usr/share/unattended-upgrades/20auto-upgrades /etc/apt/apt.conf.d/20auto-upgrades
sudo apt purge unattended-upgrades
(警告:这将覆盖所有现有的 unattended-upgrades 配置文件)执行后,重新安装该软件包sudo apt install unattended-upgrades
。确认文件 /etc/apt/apt.conf.d/20auto-upgrades 现已存在。
为了安全起见,我选择了 #2。
答案2
包配置
┌────┤ Daemons using outdated libraries ├─────┐
│ │
│ │
│ Which services should be restarted? │
│ │
│ [ ] docker.service │
│ [ ] lightdm.service │
│ [*] packagekit.service │
│ [ ] unattended-upgrades.service │
│ [ ] [email protected] │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└─────────────────────────────────────────────┘