在 ubuntu 18.04 或更高版本中终止无人值守升级或任何正在使用 apt 的内容

use*_*548 29 aptitude apt unattended-upgrades 18.04

经常发生这样的情况:当我启动我的 Ubuntu 18 机器并且想要手动更新我的软件时,我陷入了涉及已经使用 apt 的错误(无休止的等待无人值守升级和/或其他服务)。

大多数情况下,机器或虚拟机不经常启动,启动和下一次启动需要很多天或 4-5 个月,同时可能某些证书、镜像或其他东西已经更改,并且无人值守升级会卡在尝试联系不再存在的服务器时出现无休止的超时..

这是错误:

user@ubuntu:~$ sudo apt-get upgrade
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarly unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个命令行可以使用 apt 温和地终止所有实例,使 apt 环境和配置保持一致状态,并准备好使用 gui 版本的 ubuntu软件更新或 apt-get。

谢谢

Jam*_*mes 38

解决您问题的长期解决方案很简单:

sudo apt remove unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

在我看来,无人值守升级的糟糕设计没有任何借口。阻止每个软件安装,甚至系统关闭,几个小时内自动启动的进程,用户无法关闭,而不冒损坏 apt 数据库的风险:令人难以置信。

在短期内,您可以等待并希望,或者向其发送 SIGKILL 并希望得到最好的结果 - 如果下载时间很长,或者由于缺少证书、连接错误而卡住,那也没关系,或者是无人值守升级可能被自己的鞋带绊倒的数百万个其他原因之一。您可能需要手动删除锁定文件。

之后,赶快卸载无人值守升级,重新获得对计算机的控制权。

  • 这是对无人值守升级的批评回应,但遗憾的是这是事实。这项服务的设计可能很糟糕,很多时候我发现我的虚拟机因无人值守的升级混乱而损坏。大多数时候它可以让你的机器保持更新,但也有很多时候它会破坏一切。我开始认为 cronjob `sudo apt-get update && sudo apt-get update -y` 在某些情况下可以更好地工作...不直接按照答案投票,因为我需要一种解决方案来终止一次无人值守的情况-升级并手动执行更新命令,但是你说得有道理。 (3认同)
  • 几年后我很高兴从 Windows(工作)回到 Linux,并且它开始自动更新!linux 这个词什么时候决定做与私有操作系统相同的愚蠢事情:( (3认同)

小智 22

unattended-upgrades如果仍在运行,这些解决方案都将不起作用。你会得到这个错误:

E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
Run Code Online (Sandbox Code Playgroud)

您必须先停止该服务,然后才能卸载/删除它。要做到这一点:

sudo systemctl stop unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

然后摆脱它:

sudo apt-get purge unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

  • 如果“sudo systemctl stop ...”永远不会终止怎么办? (6认同)

bre*_*zky 8

使用 dpkg 进行某些 ASCII-GUI 配置是另一种选择(或者至少我认为到目前为止还没有提到):

sudo dpkg-reconfigure unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

然后只需选择No并按Enter。就我而言,这立即停止了似乎被阻止的正在进行的无人值守升级(至少与硬件似乎允许的一样快:))。

此信息可以在这里找到(荣誉): 如何在 Ubuntu 上禁用无人值守升级


小智 5

复制粘贴解决方案也可以是这样的:

sudo systemctl stop unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

如果它仍在运行:

sudo pkill --signal SIGKILL unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

禁用服务并更改配置:

sudo systemctl disable unattended-upgrades
sudo sed -i 's/Unattended-Upgrade "1"/Unattended-Upgrade "0"/g' /etc/apt/apt.conf.d/20auto-upgrades
Run Code Online (Sandbox Code Playgroud)


use*_*733 2

具有讽刺意味的是,您想要进行手动升级:无人值守升级已经为您做到了这一点。当 systemd 检测到您新启动的系统错过了 apt-update 和 apt-upgrade 计时器时,它会立即触发它们。

  • 对于大多数用户来说,只需让这些工作完成即可——无论如何,这都是您想做的。监视ps/var/run/apt/periodic查明无人值守升级何时完成工作。

但是,对于启动间隔时间较长的用例,请考虑进行编辑/etc/apt/apt.conf.d/20auto-upgrades以禁用自动更新和升级。我们建议大多数用户不要仅仅禁用它,这样他们就可以手动升级……几周后,人们往往会放弃这种方法。

使无人值守升级中止是可能的,但不建议大多数通用用户这样做。

编辑/etc/apt/apt.conf.d/50unattended-upgrades以启用此选项:

// Split the upgrade into the smallest possible chunks so that
// they can be interrupted with SIGTERM. This makes the upgrade
// a bit slower but it has the benefit that shutdown while a upgrade
// is running is possible (with a small delay)
//Unattended-Upgrade::MinimalSteps "false";
Run Code Online (Sandbox Code Playgroud)

显然,您必须清楚地了解如何使用 SIGTERM。

请注意,同一文件具有将无人值守升级移至关闭的设置(如 Windows)。

或者,自动更新和升级使用 systemd 计时器。您只需编辑 /lib/systemd/system/apt-daily.timer 和 /lib/systemd/system/apt-daily-upgrade.timer 即可更改它们运行的​​时间。删除随机化并指定您想要的恒定时间。

对于一般用途用户:您可能不需要任何这些工具,但它们是可用的。一般来说,大多数情况下不要中断 APT。不熟练地这样做不会释放锁定,并且可能会损坏您的系统。适当破损后的清理工作可能会令人困惑且乏味……但这是完全可以避免的。对于大多数用户(包括专家)来说,最佳实践是等待 5-10 分钟,直到 apt 完成其任务。吃三明治的好时机。

  • 5-10分钟确实意味着这个。要有耐心。如果 apt 似乎在 20 分钟或更长时间内没有取得任何进展,则需要担心并寻求帮助。(20 分钟不是一个规则——这是我个人的指导方针)。

  • 为什么您“不”希望将其分解为更小的步骤,这些步骤可以在不让数据库陷入混乱的情况下终止?为什么用户会想要一个无休止的过程来阻止我们安装软件或关闭几个小时?是否有人在重要演示中看到 Windows 强制升级并认为“这就是 Linux 所需要的!”? (10认同)