我可以防止恼人的 dpkg 锁定错误再次出现吗?

我可以防止恼人的 dpkg 锁定错误再次出现吗?

有没有办法永久处理这个不断重复的错误:

dpkg: error: dpkg frontend is locked by another process

和:

E: Could not get lock /var/cache/apt/archives/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/cache/apt/archives/

我尝试了所有的sudo rm解决办法但它还是一次又一次地出现。

我正在使用 Ubuntu 18.04.03。

答案1

包管理器锁定错误通常仅在以下情况之一下发生:

  • 您碰巧同时运行了两个包管理器应用程序(Synaptic、apt、Software Center 等)。这是新用户经常犯的一个错误。这个问题很容易解决:一次只使用一个。不要中止正在运行的包管理器 - 等待它完成。

    由于它们都共享一个软件包数据库和一个 deb 文件缓存,因此一次只有一个应用程序可以使用数据库和缓存。锁定文件可防止对同一文件系统数据库同时执行两个操作而导致的严重损坏。

  • 碰巧的是,您每天在无人值守升级应用程序悄悄安装安全更新的一两分钟内使用包管理器。这个问题也很容易解决:等一两分钟再试。不要尝试中止无人值守升级 - 让它完成。

    这里有一个简单的命令来判断无人值守升级是否阻碍了你使用 apt:查找 apt-daily-upgrade.timer。如果计时器刚刚过去,那么无人值守升级很可能是罪魁祸首。

    $ systemctl list-timers apt-daily-upgrade.timer
    NEXT                         LEFT    LAST                         PASSED  UNIT                    ACTIVATES
    Tue 2019-09-10 06:26:27 CDT  23h left Mon 2019-09-09 06:26:12 CDT  2m ago apt-daily-upgrade.timer apt-daily-upgrade.service
    

    在这种情况下,无人值守升级在两分钟前触发,明天将再次运行。这就是我的 apt 作业被锁文件阻止的原因。我只需等待 UU 完成,然后我的 apt 作业就会正常运行。

  • 您的系统或文件系统未正常关闭,而是被关闭或丢失了对磁盘的读/写访问权限在执行包裹操作的过程中。这有可能造成非常严重的后果,有时甚至会导致您的系统无法启动,因此请尽量避免这种情况发生。在这种情况下,sudo rm需要手动删除锁定文件,因为原始应用程序在删除其锁定之前已终止。

    (在我使用 Debian 和 Ubuntu 的 15 年时间里,我只因为这个原因需要手动删除锁文件一次。而且根本原因是我的错,而不是 Ubuntu 的错。)

  • 最后,非常罕见的是,频繁出现神秘的锁文件可能是系统损坏的征兆,也可能是您发现的一个错误。无论如何,不​​要以为其他人都在遭受困扰。我们可能没有。

答案2

如果这种情况总是发生,很可能是因为apt在启动时被锁定。

例如:

$ systemctl status apt*
● apt-daily.timer - Daily apt download activities
   Loaded: loaded (/lib/systemd/system/apt-daily.timer; enabled; vendor preset: enabled)
   Active: active (waiting) since Wed 2019-09-04 04:35:25 MDT; 5 days ago

Sep 04 04:35:25 alien systemd[1]: Started Daily apt download activities.

● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
   Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; vendor preset: enab
   Active: active (waiting) since Wed 2019-09-04 04:35:25 MDT; 5 days ago

Sep 04 04:35:25 alien systemd[1]: Started Daily apt upgrade and clean activities.

这些服务在启动时自动加载。如果它们遇到错误,它们可能永远不会结束。您需要禁用它们,以便开始查找错误并修复它。

sudo systemctl disable apt-daily.timer
sudo systemctl disable apt-daily-upgrade.timer
sudo reboot

现在它们将不再运行并锁定您的apt系统。您可以运行:

sudo apt update
sudo apt upgrade
sudo apt install -f

等等,看看存在哪些错误消息。

修复错误情况后重新启用服务:

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

其他帖子中建议删除锁定文件的答案可能完全没有必要,而且弊大于利。许多答案是在 systemd 发明/发布之前发布的。

我们需要确定锁是否从启动到关机一直保持。附加阅读:

相关内容