🛠️ Как исправить ошибку Unable to Lock the Administration Directory в Ubuntu?

by itisgood
В начале своего админского пути пользователи GNU сталкиваются с различными ошибками и проблемами, которые не всегда могут быть решены с первой попытки.
Особенно, если они не понимают, в чем проблема.
В этой статье обсуждается, как исправить ошибку Unable to Lock the Administration Directory в Ubuntu и других системах на основе Debian.

Эта проблема возникает при работе с утилитой управления пакетами apt (или apt-get в более ранних версиях) при попытке установить / обновить любые программные компоненты.

Начиная с Ubuntu 18.04, текст ошибки был немного изменен, и теперь он выглядит так:

 

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

Сообщение об ошибке говорит о том, что, скорее всего, утилита уже запущена.
Чтобы продолжить выполнение новой команды, необходимо завершить предыдущий apt-процесс обычным способом или форсировать его остановку.

Решение проблемы

Во-первых, вам нужно проверить, запущен ли экземпляр apt в одном из терминалов, и дождаться его завершения.

Принудительное закрытие также часто используется в данном случае, так как это быстрее и не представляет серьезной опасности для системы (прежде всего, если apt был склонен к отказу).

Есть два способа сделать это.

Убить процесс

Программа может быть завершена с помощью встроенной команды kill, которая отправляет определенный сигнал процессам.

Если вы не укажете номер сигнала, пользователи получат сообщение с предложением завершить процесс.

Если вы укажете девятку, процесс останавливается без предупреждения и выделения времени для правильного завершения.

Команда kill также может работать с именами процессов, но в следующем примере используется ID.

Поэтому сначала мы узнаем идентификатор процесса (PID):

pgrep apt
У меня ID 1339, у вас вероятно, он будет другим.
Теперь нам нужно использовать это число в качестве параметра команды kill с сигналом -9:
sudo kill -9 1339
Обратите внимание, что теперь процесс станет зомби, поскольку завершен дочерний процесс, а не родительский.
Он не будет занимать память, но блокирует запись в таблице процессов под требуемым идентификатором.
При небольших задачах, таких как завершение, не о чем беспокоиться.
Более правильная процедура подразумевает завершение родительского процесса.
В нашем случае была выполнена команда sudo apt dist-upgrade.
Нам нужен процесс 1337.

Поскольку родительский процесс всегда выше, чем его дочерний процесс, эту процедуру можно выполнить намного быстрее, создав скрипт fix-apt.sh со следующим содержимым:
#!/bin/bash

sudo kill -9 $(ps ax | grep apt | head -1 | gawk ‘{print $1}’)
Затем дайте файлу разрешение на его выполнение и запуск в таких ситуациях.
sudo chmod +x   fix-apt.sh

Удалить файлы блокировки

В связи с тем, что некоторые из существующих файлов, в том числе используемые в предыдущей копии программы, могут быть изменены или удалены, это может повредить работу затронутых приложений.
Таким образом, выполнение одной команды apt за один раз определяется безопасностью программных компонентов.

За это отвечают 3 файла блокировки, которые находятся в архивах /var/lib/apt/lists, /var/lib/dpkg и /var/cache/apt/.

Обычно они должны быть удалены после успешного выполнения apt, но это не происходит при непредвиденных обстоятельствах.
В этом случае они должны быть удалены вручную (разумеется, с правами суперпользователя) утилитой rm.

You may also like

Leave a Comment