如何避免“百胜锁”的麻烦?


31

尝试安装应用程序时,我经常遇到“另一个应用程序当前持有yum锁;正在等待它退出...”的消息,我必须手动杀死yum。我该如何避免呢?有什么简单的方法可以解锁yum吗?

似乎只有一个yum实例可以运行。其他软件包管理器(apt-get,pacman)是否也一样?


就我而言,我是通过VPN连接到服务器的。一旦运行sudo yum -y update,所有软件包以及开放VPN都将得到更新。开放VPN软件包更新后,我与VPN断开了连接。我重新登录,再次尝试yum更新,它说的是同样的话。
阿伦

Answers:


24

我认为这是由PackageKit引起的。您必须检查PackageKit并将其禁用(我假设它是带有的CentOS 7 systemctl,否则可以使用servicechkconfig)(如注释中所述,服务名称packagekit不是packagekitd):

systemctl stop packagekit
systemctl disable packagekit

另一种方法(在CentOS / RHEL 6,Fedora 19或更早版本上)是/etc/yum/pluginconf.d/refresh-packagekit.conf使用文本编辑器打开,然后更改enabled=1enabled=0

或者您可以完全删除它:

yum remove PackageKit

3
packagekit.service我的Centos 7
Vadim Kotov

就我而言,我只运行了systemctl stop packagekit,然后释放了yum锁。
T-Heron

9

请执行以下操作解决问题:

cd /var/run
rm -f yum.pid

您也可以在以后更新您的yum

yum -y update

1
这是在对抗症状,而不是真正原因。
Axel Beckert

4

您可以按照以下两个简单步骤解锁yum,

1)运行ps aux | grep yum以查看哪个进程正在锁定yum。2)kill <process_id>杀死进程。

再次运行ps aux | grep yum以查看该进程是否被终止。在终止进程后,Yum将被解锁。


3
这种“有效”的做法,但可能是不正确的做法
Dave Cousineau 16-10-26

1
这在某些情况下有效。我遇到了这样一种情况,即systemd在启动我自己的yum命令之前会重新启动packagekit进程。是的,杀死PID而不是优雅地告诉packagekit不运行也可能是个坏习惯。
0xSheepdog

1

就我而言,我是通过VPN(开放VPN)连接到服务器的。一旦运行sudo yum -y update,所有软件包以及开放VPN都将得到更新。开放VPN软件包更新后,我与VPN断开了连接。我重新登录,再次尝试了yum更新,它说另一个进程正在持有yum锁。

我检查了ps ax | grep yum一下,旧进程仍在运行。我等待了5分钟,以使其“完成”,但是该过程一直在运行。然后我以为我可以“杀死”扳机,所以我跑了

kill <PID of the yum update process>

那并没有杀死这个过程。尝试了几次,仍然没有成功。

最后,我必须通过运行以下命令真正拔下插头:

kill -9 <PID of the yum update process>

尝试再次更新百胜,但同样的问题。然后我跑了:

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.