如何检查自动更新是否已启用,并在启用时禁用它们?

我想确定Ubuntu 12.04服务器是否启用了自动更新。
我应该如何准确地检查这一点?
如果启用了自动更新,我该如何禁用它?

1我正在尝试构建一个与其他服务器配置相同的服务器,并且如果有人回答简单的问题,我会非常感激。如何检查自动更新是否已启用...我相对了解如何打开和关闭自动更新...但只想知道状态。 - FreeSoftwareServers
原始问题是关于“更新”的,但回答中提到了“升级”,同时在相同上下文中包含了“更新”一词。虽然我注意到我的软件更新程序可以正常进行手动更新,但它也提供了一个升级到Ubuntu的较新主要版本的选项。在许多来源中对这两个术语的使用似乎存在很大的混淆。 - MikeBT
1"更新"和"升级"有多个含义;我认为限制它们是不可行的。例如,touch(1)使用"update"来表示与软件包管理无直接关系的事情:"更新每个文件的访问和修改时间为当前时间。" Ubuntu的软件和更新工具以及apt-get update对"update"有不同的理解。我认为"这艘船已经开走了"。虽然有一个元帖 - Eliah Kagan
1要检查是否启用了无人值守更新,我发现以下答案最有帮助:https://askubuntu.com/a/1108745/1130956 - Christopher Oezbek
6个回答

有一个可以帮你完成这个任务的软件包。
sudo apt-get install unattended-upgrades

如果已经安装了unattended-upgrades,或者您可以查看Ubuntu文档
sudo dpkg-reconfigure -plow unattended-upgrades

这就是你需要安装的包。一旦安装完成,就可以编辑文件了。
/etc/apt/apt.conf.d/10periodic
/etc/apt/apt.conf.d/20auto-upgrades

在那个文件中,你可以设置服务器更新的频率。
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

文件应该是这样的。1表示每天更新,7表示每周更新。
/etc/apt/apt.conf.d/50unattended-upgrades

这些文件将让您选择希望进行更新的内容,通过选择 apt 可以搜索新更新和升级的位置。(我个人对此的看法是,如果这是一个服务器,我会将其设置为安全选项)
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
//      "${distro_id}:${distro_codename}-updates";

};

变量${distro_id}${distro_codename}会自动展开。我会注释掉更新条目,只保留安全性。

5这个是否需要更新以提及 /etc/apt/apt.conf.d/20auto-upgrades,因为在13.10版本中,默认情况下 APT::Periodic::Update-Package-Lists "1";APT::Periodic::Unattended-Upgrade "1"; 就保存在这里。 - steakunderscore
另外,在我的Ubuntu Server 12.04 LTS上,50unattended-upgrades文件已经仅设置了安全更新,因此默认设置似乎已经正确,不需要编辑该文件。 - Jeff Atwood
在我的全新Ubuntu服务器上,/etc/apt/apt.conf.d/10periodic目录并不存在。但是unattended-upgrades软件包已经安装,并且/etc/apt/apt.conf.d/50unattended-upgrades路径下的文件也存在。我的问题是,我手动添加了/etc/apt/apt.conf.d/10periodic文件后,是否需要重新启动服务器以使配置生效? - foresightyj
8这似乎是一份关于如何安装和设置无人值守升级的指南,而不是如何确认升级正在应用的指南。 - ThorSummoner
谢谢,我的系统在升级到17.04后出现了一些问题,变得过时了。 - EODCraft Staff
这些更新究竟是什么时候安装的呢?我的意思是,它们可以每天、每周等安装一次,但具体是在一天的哪个时间安装的呢?如果该程序已经在运行,那么单纯地进行更新是否就足够了呢?除非重新启动程序或计算机,否则它将继续使用先前运行的版本,对吗? - still_dreaming_1
假设我将这个更改为0:APT::Periodic::Unattended-Upgrade "0";我如何手动检查当前有哪些“无人值守升级”可用? - Nathan B
1@foresightyj 如果你有 /etc/apt/apt.conf.d/20auto-upgrades 这个文件,它的设置会覆盖前一个文件中的设置,所以你不需要添加 /etc/apt/apt.conf.d/10periodic。如果你安装了 update-notifier-common 包,那么前一个文件可能是由它生成的。 - jarno

请检查日志文件/var/log/unattended-upgrades/,以确认您的无人值守升级是否已经应用。

7虽然我给你的回答点了赞,它是目前最接近我所需的答案,但你能解释一下我应该寻找什么吗?如果启用和禁用有什么不同,它看起来是什么样子的!谢谢 - FreeSoftwareServers

(我又回答了一次,因为对LinuxBill的回答所做的更改被拒绝了。)
有一个可以用来启用自动更新的软件包,它叫做unattended-upgrades。
使用以下命令来启用/禁用自动更新:
sudo dpkg-reconfigure -plow unattended-upgrades

那个命令将修改文件/etc/apt/apt.conf.d/20auto-upgrades,并且可能还会修改/etc/apt/apt.conf.d/10periodic
或者你可以通过"软件和更新"选项卡中的software-properties-gtk以图形界面的方式启用自动更新,通过更改"When there are security updates:"下的设置。这将修改文件/etc/apt/apt.conf.d/10periodic/etc/apt/apt.conf.d/20auto-upgrades
另外,你也可以手动修改上述文件。编辑:你可以创建一个以较大数字作为名称前缀的新文件(比如21auto-upgrades),以覆盖20auto-upgrades中的设置。
在该文件中,你可以设置更新的频率。
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

1表示每天更新一次。7表示每周更新一次。变量APT::Periodic::AutocleanInterval确定“apt-get autoclean”自动执行的频率。0表示禁用这些变量,这样您可以禁用自动更新和删除。编辑:由于现在使用Systemd定时器和服务来调用自动更新和升级,最好将变量设置为“always”而不是“1”。这样即使部分随机化的时间使得调用比上一次调用后的整整一天早一些,更改也会生效。

您可以通过apt-config dump APT::Periodic检查当前设置。

您可以通过编辑文件/etc/apt/apt.conf.d/50unattended-upgrades来更改无人值守升级的工作方式。该文件将让您选择通过选择apt可以搜索新的更新和升级的位置来进行哪些更新。实际上,最好创建一个新文件,将修改放入其中;将其命名为51unattended-upgrades-local或其他大于目录中原始文件的名称,以使更改生效;这样原始文件保持不变有助于如果升级无人值守升级需要对文件进行更改。

Unattended-Upgrade::Allowed-Origins {
      "${distro_id}:${distro_codename}-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};

变量${distro_id}${distro_codename}会自动展开。上述只有安全更新是自动完成的。您可以将自动更新扩展到任何软件源,并在Unattended-Upgrade::Origins-Pattern部分进行设置。请参见另一个问题
您可能想要更改。
//Unattended-Upgrade::Remove-Unused-Dependencies "false";

Unattended-Upgrade::Remove-Unused-Dependencies "true";

这将自动删除例如过多的旧内核,以防止/boot变满。它相当于sudo apt autoremove。
编辑:更新版本的unattended-upgrades包括更复杂的设置,用于删除未使用的软件包,因此您不需要启用先前的设置。
// Remove unused automatically installed kernel-related packages
// (kernel images, kernel headers and kernel version locked tools).
//Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";

// Do automatic removal of newly unused dependencies after the upgrade
//Unattended-Upgrade::Remove-New-Unused-Dependencies "true";

Ubuntu文档unattended-upgrades github中有更多的信息。


sudo dpkg-reconfigure -plow unattended-upgrades 命令生成了 20auto-upgrades 文件。 - Ray Foss

在Ubuntu 16.04及更高版本中,Unattended Upgrades已经包含在每个标准安装的Ubuntu中(当然,不包括Ubuntu Core -- 它不使用deb软件包)。
您可以通过以下几种方式进行测试:
  1. 检查计时器状态。Unattended Upgrades使用apt-daily-upgrade.timer。在这个例子中,您可以看到Unattended Upgrades在39分钟前运行过。
me@my-system:~$ systemctl status apt-daily-upgrade.timer 
● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
     Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Sun 2021-12-05 05:41:07 CST; 39min ago
    Trigger: Sun 2021-12-05 06:20:41 CST; 1s left
   Triggers: ● apt-daily-upgrade.service

Dec 05 05:41:07 my-system systemd[1]: Started Daily apt upgrade and clean activities.

检查完成时间戳。每次成功运行后,未经人工干预的升级会在文件上打上时间戳。
me@my-system:~$ ls -lh /var/lib/apt/periodic/
total 0
-rw-r--r-- 1 root root 0 Dec  2 17:42 download-upgradeable-stamp
-rw-r--r-- 1 root root 0 Dec  5 06:21 unattended-upgrades-stamp    <----------
-rw-r--r-- 1 root root 0 Dec  2 17:42 update-stamp
-rw-r--r-- 1 root root 0 Dec  2 17:41 update-success-stamp
-rw-r--r-- 1 root root 0 Dec  5 06:21 upgrade-stamp


检查日志。未经人工干预的升级已被记录。在这个例子中,你可以看到U-U正常运行。在本次运行期间没有可用的升级包。这是最常见的结果--升级包不会每天都出现。
me@my-system:~$ tail /var/log/unattended-upgrades/unattended-upgrades.log

2021-12-03 08:30:20,578 INFO Initial whitelist (not strict): 
2021-12-03 08:30:25,854 INFO No packages found that can be upgraded unattended and no pending auto-removals
2021-12-05 06:21:11,517 INFO Starting unattended upgrades script
2021-12-05 06:21:11,528 INFO Allowed origins are: o=Ubuntu,a=impish, o=Ubuntu,a=impish-security, o=UbuntuESM,a=impish, o=Ubuntu,a=impish-updates, o=Google LLC,a=stable, o=UbuntuESM,a=impish-security
2021-12-05 06:21:11,529 INFO Initial blacklist: 
2021-12-05 06:21:11,530 INFO Initial whitelist (not strict): 
2021-12-05 06:21:15,645 INFO No packages found that can be upgraded unattended and no pending auto-removals

谢谢,这个回答实际上解决了问题,关于如何判断未经监控的升级是否已启用。在Ubuntu 20.04上也适用。 - Mendhak
为了完成升级,APT::Periodic::Unattended-Upgrade 应该仍然是非零的。我认为现在最好的值是“always”,因为调用无人值守升级是由 Systemd 计时器处理,而不是由 Cron 处理。 - jarno


sudo 不需要。 - jarno
即使“无人值守升级服务”正在运行,自动升级仍可能被禁用。 - jarno

默认情况下,自动更新已启用。如果没有启用,请按下键盘上的Ctrl+Alt+T来打开终端并启用自动更新。打开终端后,运行以下命令。
sudo apt-get install unattended-upgrades

在服务器上,你还可以编辑/etc/apt/apt.conf.d/50unattended-upgrades,并注释掉你不想自动升级的更新。这些编辑必须以root权限进行。

2我认为这不是默认开启的,至少在服务器安装中不是。然而,看起来即使在服务器上,该软件包也会自动安装。 - Alexis Wilke
我同意。正如另一位评论者在 https://askubuntu.com/questions/172524/how-can-i-check-if-automatic-updates-are-enabled#comment1608978_732862 中指出的那样,实际上是存在于 /etc/apt/apt.conf.d/20auto-upgrades 中的内容才能启用自动更新。好好知道! - Ben Johnson