修复“一劳永逸”的“无法获取锁/ var / lib / dpkg / lock”错误(Ubuntu)

could not get lock /var/lib/dpkg/lock在虚拟机中运行的Debian / Ubuntu中,错误很常见。 Internet上的现有变通办法(即杀死apt-get进程或删除锁定文件)并不理想,因为它们可能会损坏您的系统,将来您将再次面临相同的错误。

修复“一劳永逸”的“无法获取锁/ var / lib / dpkg / lock”错误

我将告诉您此错误的真正原因,并向您展示如何一劳永逸地修复它。 错误消息如下:

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg), is another process using it?

该错误消息已经给您提示问题的原因:另一个进程正在使用 /var/lib/dpkg/。 这是因为默认情况下,Ubuntu会启用无人参与的安全更新升级。

当您的Ubuntu OS完成启动后,它将自动运行 apt-get update 命令。 如果有可用的安全更新,它将在后台安装。 所以如果你跑 sudo apt upgrade 命令同时显示以上错误。 因为您没有像在裸机上使用Ubuntu那样频繁地在Virtualbox或VMware工作站中使用Ubuntu,所以Ubuntu虚拟机很少得到更新,因此您在虚拟机中更经常看到此错误。

无论您是在裸机上还是在虚拟机中使用Ubuntu桌面,都可以禁用无人值守升级来一次解决所有问题。

注意:此错误很少在Ubuntu服务器上发生,建议您在服务器上启用无人值守升级以自动安装安全更新。

就是这样。 打开 Software & Updates 从您的应用程序菜单。

是另一个使用它的过程

然后点击 updates 标签。 默认情况下,安全更新会自动下载并安装。 您可以将其更改为 display immediately,因此它不会运行 sudo apt-get upgrade 命令在后台。

修复“无法获取锁var lib dpkg锁”错误

然后输入您的用户密码,此更改才能生效。

无法锁定管理目录

之后,重新启动计算机。

从命令行禁用无人参与的升级

您也可以从命令行获得相同的结果。 在您的终端中,打开 /etc/apt/apt.conf.d/20auto-upgrades 使用命令行文本编辑器(如nano)编辑文件。

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

原始内容如下:

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

要禁用自动安全更新,请将其更改为

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

要在Nano文本编辑器中保存文件,请按 Ctrl+O,然后按Enter确认文件名。 按 Ctrl+X 退出。 然后重新启动计算机。

更新资料

一位读者告诉我,按照上述说明进行操作后,仍然可以看到错误消息 sudo apt update Ubuntu完成启动后立即执行命令。 这是因为背景“apt update”尚未完成。

如果您经常手动更新软件包,建议您将“自动检查更新”设置为 weekly 代替 daily。 要真正彻底解决错误消息,请将值设置为 Never

自动检查更新

Ubuntu何时执行无人值守升级?

Ubuntu在系统启动后执行无人值守的升级。 此外,Systemd可以执行无人值守的升级。 的 apt-daily.service 用于每天更新软件包列表,并且 apt-daily-upgrade.service 用于每天下载和安装安全更新。 您可以通过以下方式查看其状态:

systemctl status apt-daily.service

systemctl status apt-daily-upgrade.service

apt-daily.service 由…控制 apt-daily.timer。 计时器就像cron作业一样,在指定的时间执行具有相同名称的systemd服务。 的 apt-daily.timer的配置文件是 /lib/systemd/system/apt-daily.timer。 您可以使用以下方法检查其内容:

cat /lib/systemd/system/apt-daily.timer

输出:

[Unit]
Description=Daily apt download activities

[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

绿线表示 apt-daily.service 每天在6:00和18:00运行。 RandomizedDelaySec=12h 表示如果另一个计时器的开始时间相同,则该操作将被延迟0〜12小时。

apt-daily-upgrade.service 由…控制 apt-daily-upgrade.timer ,其配置文件是 /lib/systemd/system/apt-daily-upgrade.timer

cat /lib/systemd/system/apt-daily-upgrade.timer

输出:

[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target

如你看到的, apt-daily-upgrade.service 每天早上6:00运行。 RandomizedDelaySec=60m 表示如果另一个计时器具有相同的开始时间,则该操作将被延迟0〜60分钟。

他们俩 .service 文件和两个 .timer 文件由安装 apt 包,其中还附带了 /usr/lib/apt/apt.systemd.daily 由执行的shell脚本 apt-daily.serviceapt-daily-upgrade.service

/usr/lib/apt/apt.systemd.daily Shell脚本从中读取配置 /etc/apt/apt.conf.d/20auto-upgrades 文件。 因此,解决以上错误并不需要您禁用两个计时器。

而已! 希望本文能帮助您解决“could not get lock /var/lib/dpkg/lock”在Ubuntu上的错误。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar