Как избежать проблем с «ням замком»?

31

Я часто сталкиваюсь с сообщением «В настоящее время другое приложение удерживает блокировку yum; ожидает его выхода ...» при попытке установить приложение, и мне приходится убивать yum вручную. Как я могу избежать этого? Есть ли простой способ разблокировать ням?

Кажется, что может работать только один экземпляр yum. То же самое с другими менеджерами пакетов (apt-get, pacman)?

PHPst
источник
В моем случае я был подключен к серверу через VPN. После запуска sudo yum -y updateвсе пакеты обновлялись вместе с open-VPN. После обновления пакета open-VPN я был отключен от VPN. Я снова вхожу в систему, попробуйте обновить Yum снова, и он говорит то же самое.
Арун

Ответы:

24

Я думаю, что это вызвано 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
taliezin
источник
3
Он называется packagekit.serviceна моем Centos 7
Вадим Котов
В моем случае я просто запустил systemctl stop packagekit, а затем блокировка yum была снята .
T-Heron
9

Для решения проблемы сделайте следующее:

cd /var/run
rm -f yum.pid

Вы также можете обновить свой ням позже

yum -y update
Счастливчик
источник
1
Это борьба с симптомами, а не устранение истинной причины.
Аксель Бекерт
4

Вы можете разблокировать Yum, выполнив два простых шага,

1) Запустите, ps aux | grep yumчтобы увидеть, какой процесс блокирует ням. 2) kill <process_id>убить процесс.

Снова запустите, ps aux | grep yumчтобы увидеть, если процесс убит или нет. Yum будет разблокирован после завершения процесса.

MayurKubavat
источник
3
это «работает», но, вероятно, это плохая практика
Дейв Кузино
1
Это работает в определенных обстоятельствах. Я столкнулся с ситуацией, когда systemd перезапускает процесс packagekit, прежде чем я могу запустить собственную команду yum. И да, это также, вероятно, плохая практика - убивать PID вместо того, чтобы изящно говорить, что packagekit не запускается.
0xSheepdog
1

В моем случае я был подключен к серверу через VPN (открытый VPN). После запуска sudo yum -y updateвсе пакеты обновлялись вместе с open-VPN. После обновления пакета open-VPN я был отключен от VPN. Я снова вошел в систему, снова попробовал обновление yum и он сказал, что другой процесс удерживает блокировку yum.

Я проверил, ps ax | grep yumи старый процесс все еще работал. Я ждал 5 минут, пока он «закончил», но процесс просто продолжался. Тогда я подумал, что смогу спустить курок с помощью kill

kill <PID of the yum update process>

Это не убило процесс. Пробовал это еще несколько раз, но все равно безуспешно.

В конце концов мне пришлось действительно подключиться к нему, запустив:

kill -9 <PID of the yum update process>

Пробовал yum update снова, но та же проблема. Я тогда побежал:

rm -f /var/run/yum.pid

а затем попытался обновить и получил этот вывод:

Loaded plugins: fastestmirror
Setting up Update Process
Loading mirror speeds from cached hostfile
 * base: mirror.sigmanet.com
 * epel: mirror.sjc02.svwh.net
 * extras: mirrors.vpsie.com
 * updates: mirror.pac-12.org
No Packages marked for Update

Поверьте, все хорошо, но мне не нравилось тянуть на себя так много вещей!

Арун
источник
0

systemctl disable packagekit не достаточно . packagekit будет запущен после перезагрузки. Используйте maskкоманду вместо disableкоманды.

[root@localhost yum.repos.d]# systemctl mask packagekit
Created symlink from /etc/systemd/system/packagekit.service to /dev/null.

После перезагрузки вы увидите ...

[sri@localhost ~]$ systemctl status packagekit
● packagekit.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)
землеройка
источник