Linux - Ubuntu中使用APT出现错误: Could not get lock /var/lib/dpkg/lock-frontend. (unattended-upgr)

我遇到的错误:

dev@Ubuntu20:~$ sudo apt-get install samba

E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1875 (unattended-upgr)

N: Be aware that removing the lock file is not a solution and may break your system.

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

出现上述错误的原因有很多,但在我的情况下,是由于系统开始了无人值守的升级。为了进一步检查和验证错误,我尝试检查了所有运行 apt 命令的进程。

dev@Ubuntu20:~$ ps aux | grep apt

root        1785  0.0  0.0   2616   600 ?        Ss   23:00   0:00 /bin/sh /usr/lib/apt/apt.systemd.daily install

root        1791  0.0  0.0   2616  1616 ?        S    23:00   0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held install

dev         5086  0.0  0.0  12112   724 pts/0    S+   23:46   0:00 grep --color=auto apt

从上面的输出中可以看出,计划中的无人值守升级已经开始运行。您还可以使用下图所示的命令检查文件下的配置设置,以验证这一点:

dev@Ubuntu20:~$ cat /etc/apt/apt.conf.d/20auto-upgrades

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

APT::Periodic::Unattended-Upgrade "1";

从上面的输出中可以看到,无人值守升级和更新软件包列表都被设置为1,这意味着它会在你启动系统后从后台检查可用的更新,然后自动开始更新系统软件包。如果这时关机,会提示:

Linux - Ubuntu中使用APT出现错误: Could not get lock /var/lib/dpkg/lock-frontend. (unattended-upgr)_第1张图片

如果你的情况确实如此,那么要解决这个问题,你可以根据自己的条件和要求,采用以下任何一种解决方案。

Solution 1: Wait for Upgrade to Finish

第一种方案:等待更新结束

第一种解决方案是什么都不做,耐心等待无人值守升级完成。根据你的系统配置和网络带宽,完成升级不需要太多时间。这个办法对我很有效。大约几分钟后,当我使用相同的命令再次检查进程时,发现无人值守升级已不再运行。

然后再执行APT命令,问题就不出现了

Solution 2: Kill the Process

第二种方案:杀掉此进程

我不建议在紧急情况下使用的另一种解决方案是使用命令强制杀死无人值守升级,其中 PID 是无人值守升级进程的进程 ID。例如,我当前的环境,命令如下所示:

dev@Ubuntu20:~$ kill -9 1785

Solution 3: Delete Lock File

第三种方案:删掉锁文件。

此解决方案基本上适用于运行 apt 命令后关闭终端的情况。在这种情况下,你可能没有运行任何 apt 进程,但仍然无法运行命令。这只是因为创建了一个锁定文件,在前一个打开的进程结束之前,该文件会阻止任何新的 apt 进程启动。因此,要解决这个问题,你需要使用以下命令识别所有创建的锁定文件,然后手动删除所有这些文件。

$ sudo lsof /var/lib/dpkg/lock

$ sudo lsof /var/lib/apt/lists/lock

$ sudo lsof /var/cache/apt/archives/lock

如果发现有进程正在运行,可以使用 kill -9 命令删除这些进程,其中 PID 是所有 apt 进程的进程 ID。最后,你可以使用 rm 命令删除下面的锁定文件,如下图所示。

$ sudo rm /var/lib/apt/lists/lock

$ sudo rm /var/cache/apt/archives/lock

$ sudo rm /var/lib/dpkg/lock

现在,你需要使用 sudo dpkg --configure -a 命令重新配置 dpkg,如下所示。

$ sudo dpkg --configure -a

Solution 4: Permanently Remove Unattended Upgrade

解决方案 4:永久删除无人值守升级

如果你正在寻找永久性的解决方案,那么你能做的就是使用 sudo apt remove unattended-upgrades 命令从系统中移除 unattended-upgrades,如下所示。

$ sudo apt remove unattended-upgrades

然后运行 sudo apt update && sudo apt upgrade 命令,更新系统的最新更改。

$ sudo apt update && sudo apt upgrade

参考:

1,APT error

Solved "Could not get lock /var/lib/dpkg/lock-frontend (unattended-upgr)" | CyberITHub

你可能感兴趣的:(Linux,linux,ubuntu)