我年复一年地以各种形式与此作斗争。参见这里和这里。要么是我配置错了(不太可能),要么是我以奇怪的方式使用我的电脑(我没有发现)。
我的电脑是笔记本电脑:
- 以前,我晚上都会把它关掉——结果它
unattended-upgrade
经常无法在需要的时候连接到互联网。结果是:我的电脑几个月都没有升级,而且很不安全。 - 这些天我大部分时间都处于登录状态,但晚上热点连接不可用。所以现在,运行
unattended-upgrade
但没有发现任何可更新的内容,显然是因为apt update
无法成功运行。结果是:我的电脑几个月都没有升级,而且很不安全。
我如何确保systemd
计时器的apt update
运行间隔不会超过数周或数月?
典型输出/var/log/unattended-upgrades/unattended-upgrades.log
2022-02-09 06:30:27,331 INFO Starting unattended upgrades script
2022-02-09 06:30:27,334 INFO Allowed origins are: o=Ubuntu,a=focal, o=Ubuntu,a=focal-security, o=UbuntuESMApps,a=focal-apps-security, o=UbuntuESM,a=focal-infra-security, o=UbuntuESM,a=focal-security
2022-02-09 06:30:27,335 INFO Initial blacklist:
2022-02-09 06:30:27,336 INFO Initial whitelist (not strict):
2022-02-09 06:30:40,279 INFO No packages found that can be upgraded unattended and no pending auto-removals
sudo systemctl status apt-daily
:
* apt-daily.service - Daily apt download activities
Loaded: loaded (/lib/systemd/system/apt-daily.service; static; vendor preset: enabled)
Active: inactive (dead)
TriggeredBy: * apt-daily.timer
Condition: start condition failed at Wed 2022-02-09 20:42:17 EET; 4h 17min ago
└─ ConditionACPower=true was not met
Docs: man:apt(8)
Feb 09 20:42:17 tbox systemd[1]: Condition check resulted in Daily apt download activities being skippe>
lines 1-9/9 (END)
sudo systemctl list-timers apt-daily
:
NEXT LEFT LAST PASSED UNIT ACTIVATES>
Thu 2022-02-10 16:15:14 EET 15h left Wed 2022-02-09 20:42:17 EET 4h 22min ago apt-daily.timer apt-daily>
1 timers listed.
Pass --all to see loaded but inactive timers, too.
lines 1-5/5 (END)
注意:几个小时前曾重启过。未插入电源但已连接到网络。
最终结论。采用下面已接受的解决方案的版本,将时间调整apt-daily.timer
到互联网连接更可能可用的时间。感谢那些提供帮助的人。结束。
更新的解决方案 2023:现在使用每小时systemd
单调计时器,该计时器检查带有时间戳的文件,unattended-upgrade
如果已过去超过 X 小时,则运行。这是万无一失的,它在任何情况下都能可靠地工作,并确保 Ubuntu 在笔记本电脑上保持安全。我认为这应该是开箱即用的。其他人似乎认为这是不合理的。如果有人需要,可以提供分步详细信息。
答案1
检查现有的 Ubuntu Server 20.04 安装,似乎unattended-upgrade
运行是由 触发的apt-daily-upgrade.timer
。这会在每天早上 6 点触发,随机延迟长达一小时。
root@ubuntu:~# systemctl cat apt-daily-upgrade.timer
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true
[Install]
WantedBy=timers.target
一种可能简单的解决方案是覆盖OnCalendar
设置,以便计时器在更有可能在线的时间触发。例如
mkdir /etc/systemd/system/apt-daily-upgrade.timer.d
cat <<EOF >/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=*-*-* 12:00
EOF
systemctl daemon-reload
这将改为在中午触发计时器。 unattended-upgrade
默认情况下,每天仅运行一次。这是因为 的设置APT::Periodic::Unattended-Upgrade
。从中挑选评论/usr/lib/apt/apt.systemd.daily
# APT::Periodic::Unattended-Upgrade "0";
# - Run the "unattended-upgrade" security upgrade script
# every n-days (0=disabled)
此库存配置值为1
天。
root@ubuntu:~# apt-config dump APT::Periodic::Unattended-Upgrade
APT::Periodic::Unattended-Upgrade "1";
您可以通过添加 apt 配置将计时器配置为每天一次以上。注释链接https://unix.stackexchange.com/a/541426/147262有几个建议。下面是添加 apt 配置的简单示例
cat <<EOF > /etc/apt/apt.conf.d/90myuu
> APT::Periodic::Unattended-Upgrade "always";
> EOF
如果您覆盖了,apt-daily-upgrade.timer
那么您可能希望对 进行相同的覆盖apt-daily.timer
。这也具有相应的 apt 配置值APT::Periodic::Update-Package-Lists
。
编辑我已将建议从每小时运行一次改为每天运行一次,每次运行的时间可能都是在线。我意识到每天运行一次的默认设置不受是否有unattended-upgrade
任何软件包需要更新的影响。因此,unattended-upgrade
仍然可以继续仅在不在线时运行。
评论
像那样对日常计时器进行超频是否存在任何潜在的缺点?
升级默认在夜间进行,以避免干扰用户活动。您将不再享有这种便利。
未满足 ConditionACPower=true。您可以更改该设置
您应该使用覆盖文件来更改此设置,而不是通过修改软件包安装的服务文件
mkdir /etc/systemd/system/apt-daily-upgrade.service.d
cat <<EOF > /etc/systemd/system/apt-daily-upgrade.service.d/override.conf
[Unit]
ConditionACPower=false
EOF
systemctl daemon-reload
覆盖 apt-daily.timer 的原因或缺点是什么?
apt-daily.timer
触发 apt 命令来更新软件包信息并下载可用更新。如果这些命令在网络不可用时继续运行,则unattended-upgrade
可能无法更新任何内容,因为它可能不知道有可用的更新。