Вопрос или проблема
Я часто сталкиваюсь с сообщением Еще одно приложение в настоящее время удерживает блокировку yum; ждем его выхода...
, когда пытаюсь установить приложение, и мне приходится вручную убивать yum. Как можно этого избежать? Есть ли простой способ разблокировать yum?
Похоже, что только один экземпляр yum может работать одновременно. То же самое касается других менеджеров пакетов (apt-get, pacman)?
Я думаю, что это вызвано PackageKit. Вам нужно проверить наличие PackageKit и отключить его (я предполагаю, что это CentOS 7 с systemctl
, в противном случае вы можете использовать service
и chkconfig
) (как упоминалось в комментариях, имя службы packagekit
, а не packagekitd
):
systemctl stop packagekit
systemctl disable packagekit
Другой подход (в CentOS/RHEL 6, Fedora 19 или раньше) — открыть /etc/yum/pluginconf.d/refresh-packagekit.conf
с помощью текстового редактора и изменить enabled=1
на enabled=0
.
Или вы можете полностью удалить его:
yum remove PackageKit
Сделайте следующее, чтобы решить проблему:
cd /var/run
rm -f yum.pid
Также вы можете обновить ваш yum после этого
yum -y update
Вы можете разблокировать yum, следуя двум простым шагам:
1) Запустите ps aux | grep yum
, чтобы увидеть, какой процесс блокирует yum.
2) kill <идентификатор_процесса>
, чтобы завершить процесс.
Снова выполните ps aux | grep yum
, чтобы увидеть, убит ли процесс или нет. Yum будет разблокирован после завершения процесса.
В моем случае я был подключен к серверу через VPN (open VPN). Как только я запустил sudo yum -y update
, все пакеты обновились, вместе с open-VPN. Как только пакет open-VPN был обновлён, я был отключён от VPN. Я снова вошёл в систему, снова попытался выполнить обновление yum и получил сообщение, что другой процесс удерживает блокировку yum.
Я проверил с помощью ps ax | grep yum
, и старый процесс все еще работал. Я ждал 5 минут, чтобы он «завершился», но процесс продолжал работать. Затем я подумал, что могу «нажать на курок» с помощью kill, поэтому я запустил
kill <PID процесса обновления yum>
Это не завершило процесс. Я попробовал еще несколько раз, и результат был прежним.
В конце концов, мне действительно пришлось «вытянуть провод», запустив:
kill -9 <PID процесса обновления yum>
Я снова попытался выполнить обновление yum, но проблема осталась. Затем я выполнил:
rm -f /var/run/yum.pid
и затем попробовал обновление и получил следующий результат:
Загруженные плагины: fastestmirror
Настройка процесса обновления
Загрузка скоростей зеркал из кэшированного файла
* base: mirror.sigmanet.com
* epel: mirror.sjc02.svwh.net
* extras: mirrors.vpsie.com
* updates: mirror.pac-12.org
Нет пакетов, отмеченных для обновления
Кажется, все в порядке, но мне не понравилось «вытягивать провод» из так многого!
systemctl disable packagekit
недостаточно. packagekit будет работать при перезагрузке. Вместо этого используйте команду mask
.
[root@localhost yum.repos.d]# systemctl mask packagekit
Создан символический линк из /etc/systemd/system/packagekit.service в /dev/null.
Затем при перезагрузке вы увидите …
[sri@localhost ~]$ systemctl status packagekit
● packagekit.service
Загружен: заблокирован (/dev/null; ошибка)
Активен: неактивен (мертв)
Удаление PackageKit также удалит графический интерфейс программного обеспечения. Вместо этого сделайте так, это было эффективно для меня на RHEL >= 7.6.
Создайте /etc/yum/pluginconf.d/refresh-packagekit.conf
[main]
enabled=0
Ответ или решение
Как избежать проблем с блокировкой yum
Если вы часто сталкиваетесь с сообщением об ошибке «Another app is currently holding the yum lock; waiting for it to exit…», это может вызывать значительные неудобства, особенно когда нужно оперативно установить или обновить программное обеспечение. Давайте рассмотрим основные причины блокировок yum и предложим несколько эффективных решений для предотвращения данной проблемы.
Причины блокировки yum
-
Одновременное использование нескольких экземпляров yum: Всего один экземпляр yum может работать одновременно. Если вы пытаетесь запустить yum, когда уже выполняется другой процесс, он будет заблокирован.
-
Работа служб, использующих yum: На системах на базе CentOS 7 и более поздних версиях может работать служба PackageKit, которая периодически запрашивает обновления. Если она активна, это может привести к блокировке yum.
Решения для предотвращения блокировок yum
-
Отключение службы PackageKit:
Для систем на базе CentOS 7 и новее рекомендуется отключить службу PackageKit, которая может мешать работе yum. Используйте следующие команды для остановки и отключения службы:sudo systemctl stop packagekit sudo systemctl disable packagekit
Чтобы предотвратить автоматический запуск службы при перезагрузке системы, вместо отключения выполните команду
mask
:sudo systemctl mask packagekit
Это создаст символическую ссылку на
/dev/null
, тем самым полностью предотвратив запуск службы. -
Настройка плагина refresh-packagekit:
Для более старых версий CentOS и RHEL можно изменить конфигурацию плагина, который запускает PackageKit:sudo nano /etc/yum/pluginconf.d/refresh-packagekit.conf
Затем измените значение
enabled=1
наenabled=0
. Это сможет предотвратить автоматические вызовы. -
Удаление PackageKit:
Если вы не используете графические интерфейсы для управления пакетами, может быть разумно полностью удалить PackageKit:sudo yum remove PackageKit
-
Управление зависшими процессами yum:
Если вы столкнулись с ошибкой блокировки и уверены, что другой процесс yum действительно завис, выполните следующее:-
Проверьте список активных процессов yum:
ps aux | grep yum
-
Убедитесь, что вы идентифицировали правильный процесс, и завершите его, если это необходимо:
sudo kill <process_id>
-
Если процесс не завершился, попробуйте принудительное завершение:
sudo kill -9 <process_id>
-
После этого удалите
yum.pid
:sudo rm -f /var/run/yum.pid
-
-
Регулярные обновления:
После устранения блокировок рекомендуется периодически обновлять yum для повышения стабильности:sudo yum -y update
Заключение
Избежать проблем с блокировкой yum можно за счёт нескольких простых шагов, таких как отключение службы PackageKit или управление зависшими процессами. Регулярные обновления системы также помогут в поддержании её работоспособности. Будьте внимательны при выполнении команд, особенно с kill
, чтобы не завершить критически важные процессы. Применяя эти рекомендации, вы сможете значительно облегчить управление программным обеспечением на вашей системе.