dpkg: помилка: база даних статусу dpkg блокується іншим процесом


68

Мені просто було цікаво, чи хтось може мені сказати, що це означає:

E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
reidsr@ubuntu:~$ sudo dpkg --configure -a
dpkg: error: dpkg status database is locked by another process
reidsr@ubuntu:~$ 

Як запустити sudo dpkg --configure -a вручну?


Чи важлива ця машина, тобто ви можете її перезавантажити? Потрібно вирішити це справді швидко
Геккл

Відповіді:


94

Перший запуск:

lsof /var/lib/dpkg/lock

Потім переконайтеся, що процес не працює:

ps cax | grep PID

Якщо він працює:

kill PID
#wait
kill -9 PID

Переконайтеся, що процес виконаний:

ps cax | grep PID

Потім видаліть файл блокування:

sudo rm /var/lib/dpkg/lock

Нехай dpkg виправить себе:

sudo dpkg --configure -a

Ви повинні бути добре після цього :)


7
Ніколи не слід видаляти замкові файли вручну. Вони там чомусь. Будь ласка, використовуйте це лише в крайньому випадку. Спочатку спробуйте визначити та закрити інші програми за допомогою управління пакетами.
gertvdijk

8
Якщо є процес, який фактично використовує файл блокування, то, ймовірно, було б краще вбити цей процес, а не просто видаляти файл блокування. Ви повинні мати можливість знайти процес за допомогою lsof /var/lib/dpkg/lock.
Абе Волкер

Сильний +1 для коментаря Abe. Ніколи не видаляйте файл блокування, не вбиваючи всіх процесів, у яких є відкриті дескриптори файлів.
Пуян Хосраві

1
@ Xen2050 IMO нова відповідь додає зайвої безладу. Якщо ви вважаєте, що bash-скрипт, який робить те ж саме автоматично, є корисним, я напишу його як іншу відповідь.
Пуян Хосраві

1
Як зараз, це, безумовно, найкраща відповідь. Так, дуже важливо переконатися, що замок не має жодного запущеного процесу. Я вже перевіряв це, нічого не працює, і мені потрібно було знати, як видалити старий замок. Ця відповідь охоплює всі основи.
Ламбарт

9

Не можна одночасно запускати кілька програм / команд / інструментів пакетів. Іноді це означає, що синаптичний, apt-get або інструмент оновлення пакета працює у фоновому режимі. Просто закрийте інші інструменти для пакунків або дочекайтеся їх завершення. І dpkg запуститься.


8

Можна також спробувати:

sudo apt-get install -f

Щоб виправити зламані пакети:

Виправити; спроба виправити систему з розбитими залежностями на місці. Цей параметр, коли використовується для встановлення / видалення, може опустити будь-які пакети, щоб дозволити APT вивести ймовірне рішення. Якщо пакети вказані, вони повинні повністю виправити проблему. Цей параметр іноді необхідний при першому запуску APT; APT сам по собі не дозволяє порушеним залежностям пакета існувати в системі. Можливо, що структура залежності системи може бути настільки пошкодженою, що вимагає втручання вручну (що зазвичай означає використання dselect(1)або dpkg --removeусунення деяких пакетів, що порушують правопорушення). Використання цієї опції разом з -m може призвести до помилки в деяких ситуаціях. Елемент конфігурації: APT :: Get :: Fix-Broken.



1

Один із підходів - це просто перезапустити ПК. Це працювало для мене.


0

Це може статися, якщо процес оновлення був перерваний (як-от у вас втрачено з’єднання). Ви можете спробувати використовувати екран як root ( sudo su), щоб повернутися до сеансу.

screen -r

0

Тут є кілька хороших відповідей, але я просто хотів додати не-lsof метод пошуку користувача блокування dpkg

Крок 1. Дізнайтеся, хто блокує dpkg:

Варіант №1: Використання lsof (не завжди встановлюється на машині)

lsof /var/lib/dpkg/lock

Варіант №2: Використання bash

for pid in $(ls /proc | egrep [0-9]+); do sudo ls -l /proc/$pid/fd 2>/dev/null | grep /var/lib/dpkg/lock && echo $pid; done

Крок 2. Вирішіть, що ви хочете зробити з поточним користувачем dpkg

Якщо такого процесу немає, вирішити нічого, просто перейдіть до наступного кроку.

В іншому випадку ви повинні вирішити, чи хочете ви вбити процес чи дозволити його закінчити граціозно. Якщо ви вирішили його вбити, просто використовуйте kill <pid>. Якщо процес все ще не загине, ви можете розглянути можливість його вбивства kill -9 <pid>, але це може створити певні невідповідності, і я раджу проти нього, якщо ви не знаєте, що ви робите.

Крок 3: Видаліть файл блокування

sudo rm /var/lib/dpkg/lock

Крок 4: Виправте внутрішній стан dpkg

sudo dpkg --configure -a


0

У нашому випадку не було запущеного процесу (PID), тому я жорстко зупинився і перезавантажив VPS.

Далі, є кілька файлів блокування, які, можливо, потрібно буде видалити:

sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/cache/apt/archives/lock

Потім ви можете виправити, dpkgяк пропонується:

sudo apt update
sudo dpkg --configure -a
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.