在 Ubuntu 服务器 22.04 上,如何控制每日自动更新检查的时间?
我的一台服务器在某些(已知)时间段内无法访问互联网。自动更新发生时,如果没有互联网访问,它会永远挂起。即使恢复互联网访问,更新仍然挂起,我必须手动终止它,然后进行手动更新。
我想保留自动更新功能,但我需要将其限制在特定日期/小时内。
我发现这个线程声称对于 18.04,应该设置一个 chron 作业来切换几个设置:
如何禁止软件更新程序在一天中的某些时间或一周中的某些天检查更新?
但是,它指定的设置不存在:
# gsettings get org.gnome.software download-updates
No such schema “org.gnome.software”
# gsettings get org.gnome.software allow-updates
No such schema “org.gnome.software”
答案1
apt 每日定时器由 systemd 运行:
me@me:~$ systemctl list-timers | grep apt
Wed 2022-11-30 00:42:17 CST 14h left Tue 2022-11-29 07:57:32 CST 2h 22min ago apt-daily.timer apt-daily.service
Wed 2022-11-30 06:41:41 CST 20h left Tue 2022-11-29 07:57:32 CST 2h 22min ago apt-daily-upgrade.timer apt-daily-upgrade.service
请注意,有两项工作:
- apt-每日 =
apt update
- apt-daily-upgrade = 无人值守升级 =
apt upgrade
仅用于安全升级(可在 /etc/apt/apt.conf.d/50unattended-upgrades 配置)
接下来,让我们找到 apt-daily 定时器的位置:
me@me:~$ systemctl status apt-daily.timer | grep loaded
Loaded: loaded (/lib/systemd/system/apt-daily.timer; enabled; preset: enabled)
由于该文件位于 /lib/systemd,因此当 apt 包更新时它将被覆盖。所以我们无法直接更改该文件。
相反,让我们写一个覆盖/etc 中的文件。
首先,我们将文件复制到 /etc:
sudo cp /lib/systemd/system/apt-daily.timer /etc/systemd/system/
接下来我们编辑这个文件,原文如下:
[Unit]
Description=Daily apt download activities
[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true
[Install]
WantedBy=timers.target
查看计时器部分。这是您要编辑的部分,以匹配系统在线的时间。
- 将窗口缩小到您需要的范围,但要保持一定的随机性。不要让所有机器同时攻击镜像。朋友不会发起 DDOS 攻击。参见https://www.freedesktop.org/software/systemd/man/systemd.timer.html用于定时器选项。
例如,对于每天关闭的机器来说,这样的设置可能更合理。apt-daily 作业将在启动后 5 到 60 分钟内运行。
OnStartupSec=300
RandomizedDelaySec=3300
覆盖第二项作业(apt-daily-upgrade)的计时器留给学生作为练习。
答案2
简短的回答是:
# systemctl edit --full apt-daily.timer
这会将现有文件复制到 /etc/systemd/... 并在 中打开它$EDITOR
。更改 OnCalendar= 和 RandomizedDelaySec= 行,保存文件,退出编辑器。使用systemctl edit
将在编辑器退出后触发加载新/编辑的文件。
# systemctl status apt-daily.timer
以上应显示正在使用的新文件(/etc/systemd/...)和预期的触发时间。
使用 apt-daily-upgrade.timer 重复上述操作:
# systemctl edit --full apt-daily-upgrade.timer
[...]