我有几个集群服务器,我想用无人值守升级来升级它们 - 但要在一周的不同日子里进行。由于我可能会丢失集群中的多个节点,所以我想确保一个节点在周一运行无人值守升级,一个在周三运行,一个在周五运行。
看看无人值守升级,我对调度有点困惑。systemd-timers
与 apt 相关的有多个:
$ systemctl list-timers | head -1; systemctl list-timers | grep -e apt -e update; systemctl list-timers | tail -3
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2023-12-08 12:09:06 CET 2h 10min left Fri 2023-12-08 04:59:42 CET 4h 58min ago apt-daily.timer apt-daily.service
Fri 2023-12-08 14:49:29 CET 4h 51min left Thu 2023-12-07 14:49:29 CET 19h ago update-notifier-download.timer update-notifier-download.service
Sat 2023-12-09 06:08:14 CET 20h left Fri 2023-12-08 06:27:50 CET 3h 30min ago apt-daily-upgrade.timer apt-daily-upgrade.service
Mon 2023-12-11 00:28:08 CET 2 days left Fri 2023-12-08 04:10:29 CET 5h 47min ago update-notifier-motd.timer update-notifier-motd.service
12 timers listed.
Pass --all to see loaded but inactive timers, too.
但似乎都没有引发unattended-upgrades
。
有一个system.service
——但是它好像没有很丰富的调度功能:
$ systemctl status unattended-upgrades
● unattended-upgrades.service - Unattended Upgrades Shutdown
Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-11-17 14:40:05 CET; 2 weeks 6 days ago
Docs: man:unattended-upgrade(8)
Main PID: 866 (unattended-upgr)
Tasks: 2 (limit: 9389)
Memory: 10.8M
CPU: 83ms
CGroup: /system.slice/unattended-upgrades.service
└─866 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
Nov 17 14:40:05 hostname systemd[1]: Started Unattended Upgrades Shutdown.
我想我可以写我自己的 timer
并让它触发另一次调用unattended-upgrades
- 但这感觉有点像过度设计某些东西,而其他人可能已经更好地解决了这个问题。
我该如何分配unattended-upgrade
一周内的日程?
答案1
对于大多数集群管理员来说,默认设置应该可以确保安全操作,而无需进行任何特殊调整。
无人值守升级会自动安排下载和运行的随机间隔。这是为了避免在时钟间隔内用数百万个请求来打击镜像,但也意味着集群中的机器应该已经被随机数量所抵消。
此外,无人值守升级旨在您的服务器继续正常运行时不被打扰地进行。
无人值守升级不应该导致服务器退出集群,除非在极少数情况下需要重新启动(内核更新)并且您已启用 apt 来触发重新启动(默认=禁用)。
- 由于这是您更改的设置,因此您可以将其改回。
您也可以使用计时器。apt-daily-upgrade.timer
是无人值守升级的触发器(.timer
,不是.service
)
不要编辑默认计时器(/lib/systemd/system/apt-daily-upgrade.timer
),因为您的编辑将在下次包升级时被覆盖。
相反,创建一个覆盖文件 ( /etc/systemd/system/apt-daily-upgrade.timer
) 来进行更改。
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer
[Timer]
OnCalendar=*-*-* 6:00 <------ Edit this timer setting
RandomizedDelaySec=60m <------ Or change your randomization
Persistent=true
[Install]
WantedBy=timers.target
如果您确实对计时器或服务进行了更改,请记住在 24-48 小时内回访,以确保无人值守升级确实在进行,并且按照您期望的时间表进行。您刚刚拆卸并重新组装了 Ubuntu 系统的一个关键安全组件,因此检查是否存在愚蠢或错误是您的责任。