所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 管理

如何在 Ubuntu 中禁用自动更新(完整指南)

默认情况下,Ubuntu 会自动安装更新以保持系统安全和稳定。虽然这种行为对大多数桌面用户来说是理想的,但在生产环境、测试服务器或任何需要精确控制软件版本的情况下可能会有问题。意外的更新可能会破坏依赖关系、中断正在运行的服务,或引入难以在压力下诊断的回归。

本指南将带您了解在 Ubuntu 中禁用自动更新的每种方法——涵盖 APT、Snap 和 systemd 计时器——以及在手动管理更新时保持安全的最佳实践。

您可能想要禁用自动更新的原因

自动更新是一个合理的默认设置,但有正当的理由将其关闭:

  • 服务器稳定性:在VPS Hosting或专用服务器环境中,计划外的内核更新或服务重启可能会导致意外停机。
  • 版本固定:具有严格依赖关系要求的应用程序可能会在底层包被静默升级时中断。
  • 测试环境:可重现的测试环境需要在运行中保持一致的包版本。
  • 受控部署管道:DevOps工作流通常通过CI/CD管道而不是操作系统本身来管理更新。
  • 资源限制:自动后台更新会消耗CPU、RAM和带宽——这些资源在繁忙的服务器上可能至关重要。

理解这些权衡至关重要。禁用自动更新会将安全补丁的责任完全转移给您。

Ubuntu 中的主要自动更新机制

在禁用任何内容之前,了解您实际关闭的内容会很有帮助。Ubuntu 使用四种主要机制进行自动更新:

机制目的
unattended-upgrades自动安装安全和其他更新
APT::Periodic控制 APT 检查和下载更新的频率
snapd自动刷新 Snap 软件包
systemd timers安排后台 APT 更新任务

这些机制中的每一个都可以独立禁用,让您对系统的更新行为进行精细控制。

方法 1:通过配置文件禁用自动 APT 更新

这是最常见和推荐的方法。Ubuntu 的 APT 定期配置存储在 /etc/apt/apt.conf.d/20auto-upgrades

步骤 1:打开配置文件

sudo nano /etc/apt/apt.conf.d/20auto-upgrades

步骤 2:修改配置值

您通常会看到类似以下内容:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

将两个值都更改为 "0" 以禁用自动列表更新和无人值守升级:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

步骤 3:保存并退出

Ctrl+O 保存文件,然后按 Ctrl+X 退出 nano 编辑器。

可选:扩展 APT 定期设置

为了获得更精细的控制,您还可以编辑或创建 /etc/apt/apt.conf.d/10periodic

sudo nano /etc/apt/apt.conf.d/10periodic

将所有值设置为 "0"

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "0";

这确保不会发生后台 APT 活动。

方法 2:完全删除 unattended-upgrades

如果您更喜欢更明确的方法,可以完全删除 unattended-upgrades 包:

sudo apt remove unattended-upgrades -y

要同时删除其配置文件:

sudo apt purge unattended-upgrades -y

这将完全消除负责自动安全更新的服务。仅当您确信自己的手动更新工作流程时,才使用此方法。

方法 3:禁用自动 Snap 更新

Snap 包由 snapd 管理,并独立于 APT 进行更新。有两种方法来处理这个问题。

选项 A:停止并禁用 snapd 服务

这是最激进的方法,将阻止所有 Snap 功能:

sudo systemctl stop snapd.service
sudo systemctl disable snapd.service

> 注意:完全禁用 snapd 将阻止所有 Snap 包运行。仅在您不依赖任何基于 Snap 的应用程序时使用此方法。

选项 B:修改 Snap 刷新计划(推荐)

更安全的方法是将刷新计时器设置为永远不会发生的时间窗口,从而有效地阻止自动更新,同时保持 Snap 功能:

sudo snap set system refresh.timer=00:00-00:00

或者,您可以使用 systemctl edit 来覆盖服务环境:

sudo systemctl edit snapd.service

添加以下块:

[Service]
Environment=SNAPD_REFRESH_TIMER=00:00-00:00

保存并退出。这将阻止 Snap 自动刷新包,而无需完全禁用服务。

方法 4:禁用 APT 的 systemd 计时器

Ubuntu 使用 systemd 计时器来计划 APT 更新任务。这些计时器独立于 unattended-upgrades 服务运行,为了完全控制,也应该禁用。

使用单个命令禁用并停止两个计时器:

sudo systemctl disable --now apt-daily.timer
sudo systemctl disable --now apt-daily-upgrade.timer
  • apt-daily.timer — 触发每日 APT 软件包列表更新
  • apt-daily-upgrade.timer — 触发每日升级过程

--now 标志既禁用计时器在启动时启动,也会在其当前运行时立即停止它。

如何验证自动更新已禁用

应用上述更改后,确认所有内容都已正确禁用。

检查 systemd 计时器状态

systemctl status apt-daily.timer apt-daily-upgrade.timer

两个计时器都应报告为 inactive (dead)。如果任一个显示为 active,请重新访问上面的禁用步骤。

验证 APT 配置

cat /etc/apt/apt.conf.d/20auto-upgrades

预期输出:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

检查 unattended-upgrades 服务状态

systemctl status unattended-upgrades

如果您删除了该软件包,此命令将返回一个错误,指示该服务不存在 — 这是预期的结果。

禁用自动更新后的重要安全考虑

禁用自动更新是一个有效的管理选择,但它伴随着真实的责任。以下是保持系统安全必须做的事情:

1. 手动定期更新

按照一致的计划运行以下命令 — 最少每周一次:

sudo apt update && sudo apt upgrade -y

对于完整的发行版级别升级:

sudo apt full-upgrade -y

2. 监控安全公告

订阅 Ubuntu 安全通知 (USN) 邮件列表或 RSS 源。这确保您在关键漏洞披露时立即了解。

3. 更新前创建快照

在生产服务器上,在应用更新之前始终创建系统快照或备份。如果您运行的是专用服务器,请使用您的提供商的快照工具或 rsync、Timeshift 或 LVM 快照等解决方案来创建还原点。

4. 使用暂存环境

在将更新应用到生产环境之前,在暂存或开发环境中测试更新。这对于运行复杂堆栈的服务器尤其重要。

5. 定期审计已安装的软件包

apt list --upgradable

这显示所有具有可用更新的软件包,允许您根据优先级有选择地应用补丁。

如何重新启用自动更新

如果您决定恢复自动更新行为,该过程很简单。

通过配置文件重新启用

编辑 /etc/apt/apt.conf.d/20auto-upgrades 并将值设置回 "1"

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

重新安装 unattended-upgrades

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

重新启用 systemd 计时器

sudo systemctl enable --now apt-daily.timer
sudo systemctl enable --now apt-daily-upgrade.timer

重新启用 Snap 自动刷新

sudo snap set system refresh.timer=00:00~24:00/4

这会恢复默认的 Snap 刷新计划(每天四次,随机间隔)。

为手动更新控制选择合适的托管环境

如果您手动管理更新,所使用的托管环境类型至关重要。完全的root访问权限对于本指南中描述的控制级别是必不可少的。

  • VPS 托管 — 适合需要对Ubuntu环境进行完全控制的开发人员和系统管理员,包括更新管理、内核配置和服务调度。
  • 独立服务器 — 最适合高流量生产工作负载,其中更新时间、资源使用和稳定性至关重要。
  • 带 cPanel 的 VPS — 如果您想要root级别的控制权并结合图形界面来管理服务器设置和托管网站,这是一个不错的选择。

共享托管环境通常不提供修改APT或systemd配置所需的操作系统级别访问权限。

快速参考:一览所有命令

# Disable APT auto-updates via config
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
# Set both values to "0"

# Remove unattended-upgrades package
sudo apt remove unattended-upgrades -y

# Disable Snap auto-refresh (safe method)
sudo snap set system refresh.timer=00:00-00:00

# Disable Snap service entirely (aggressive)
sudo systemctl stop snapd.service
sudo systemctl disable snapd.service

# Disable systemd APT timers
sudo systemctl disable --now apt-daily.timer
sudo systemctl disable --now apt-daily-upgrade.timer

# Verify timer status
systemctl status apt-daily.timer apt-daily-upgrade.timer

# Manual update command
sudo apt update && sudo apt upgrade -y

结论

在 Ubuntu 中禁用自动更新可以让您精确控制何时以及如何将更改应用于您的系统。这在服务器环境、CI/CD 管道以及任何优先考虑稳定性和可预测性而非即时性的情况下特别有价值。

该过程涉及四个关键领域:APT 定期配置、unattended-upgrades 软件包、Snap 的刷新机制和 systemd 计时器。解决所有四个方面可确保没有后台更新过程可以在没有您明确操作的情况下修改您的系统。

但是,这种控制伴随着责任。您必须承诺制定定期的手动更新计划、监控安全公告,并在应用更改前维护备份。管理良好的具有手动更新的服务器是安全的——被忽视的服务器则不是。

无论您运行的是开发环境、生产应用服务器还是 GPU Hosting 上的专业工作负载,理解和控制您的更新策略是专业系统管理的基础部分。