Ubuntu Server无人值守升级:如何避免重启服务并确定需忽略的软件包
Ubuntu Server无人值守升级:如何避免重启服务并确定需忽略的软件包
作为常年维护Ubuntu生产服务器的老鸟,太懂你这种怕自动更新搞崩运行中服务的焦虑了!尤其在20.04和22.04这两个长期支持版本上,既要保持系统安全更新,又不能让关键服务被强制重启,确实得精心挑选要忽略的软件包。结合我的实战经验,给你整理如下:
必须加入忽略列表的软件包及原因
- Docker生态组件:不止
docker本身,还要包含docker-ce、docker-ce-cli、containerd.io。这些组件更新时几乎必然会重启Docker守护进程,直接导致运行中的容器被强制停止或重启,严重影响业务连续性。 - Systemd核心套件:
systemd、systemd-sysv、systemd-timesyncd这类核心组件绝对不能让自动更新碰。Systemd是系统的初始化进程,它的重启会连带触发大量依赖服务的重启,甚至可能导致系统进入不稳定状态。 - 高可用集群组件:除了你提到的
corosync、pacemaker,还要加上pcs(集群配置工具)、fence-agents(隔离故障节点的组件)。这类组件更新后自动重启会触发集群的故障检测机制,很可能引发资源漂移、节点隔离甚至脑裂问题。 - 容器编排核心组件:如果你的服务器跑了Kubernetes,
kubelet、kubeadm、kubectl也必须加入黑名单。Kubelet的自动重启会直接导致节点上的所有Pod被重建,业务中断风险极高。 - 存储底层组件:像
lvm2(逻辑卷管理)、ceph-common(Ceph存储客户端)、iscsi-initiator-utils(iSCSI存储工具)这类存储相关组件,更新后自动重启可能导致挂载的存储卷中断,引发数据访问故障。 - 网络核心配置工具:Ubuntu默认的
netplan.io、networkd-dispatcher也建议忽略。这类组件更新重启可能导致网络配置重置,引发集群节点失联、容器网络异常等问题。
配置忽略列表的方法
在Ubuntu中,无人值守升级的配置文件位于/etc/apt/apt.conf.d/50unattended-upgrades,你可以在Unattended-Upgrade::Package-Blacklist区块中添加需要忽略的包:
Unattended-Upgrade::Package-Blacklist { "docker"; "docker-ce"; "containerd.io"; "systemd"; "systemd-sysv"; "corosync"; "pacemaker"; "pcs"; "kubelet"; "lvm2"; "netplan.io"; };
后续注意事项
忽略这些包后,千万不能忘了定期手动更新!建议每月固定一个维护窗口,按以下流程操作:
- 提前备份关键数据和配置
- 对业务做优雅停机(比如Docker容器先暂停流量、集群切换到维护模式)
- 手动执行
apt update && apt install <要更新的包>完成升级 - 验证服务恢复正常后再恢复业务
备注:内容来源于stack exchange,提问作者KdgDev
相关产品推荐
相关产品推荐

