dpkg: error: dpkg status veritabanı başka bir işlem tarafından kilitlendi


68

Acaba birileri bana bunun ne anlama geldiğini söyleyebilir mi?

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 Manuel olarak nasıl çalışabilirim ?


Bu makine önemli mi, yani, yeniden başlatılabilir mi? Bu kadar çabuk
Huckle

Yanıtlar:


94

İlk çalıştırma:

lsof /var/lib/dpkg/lock

Ardından işlemin çalışmadığından emin olun:

ps cax | grep PID

Çalışıyorsa:

kill PID
#wait
kill -9 PID

İşlemin yapıldığından emin olun:

ps cax | grep PID

Ardından kilit dosyasını kaldırın:

sudo rm /var/lib/dpkg/lock

Dpkg kendini düzeltsin:

sudo dpkg --configure -a

Daha sonra iyi olmalısın :)


7
Kişi hiçbir zaman kilit dosyalarını el ile kaldırmamalıdır. Bir sebep için oradalar. Lütfen, bunu yalnızca en son çare olarak kullanın. İlk önce paket yönetimini kullanarak diğer uygulamaları tanımlayıp kapatmaya çalışın.
gertvdijk

8
Kilit dosyasını gerçekten kullanan bir işlem varsa, muhtemelen kilit dosyasını kaldırmak yerine bu işlemi öldürmek daha iyi olur. Süreci ile bulabilmelisiniz lsof /var/lib/dpkg/lock.
Abe Voelker

Abe'nin yorumu için güçlü bir +1. Asla açık dosya tanıtıcıları olan tüm işlemleri öldürmeden bir kilit dosyasını çıkarmayın.
Pooyan Khosravi,

1
@ Xen2050 IMO yeni bir cevap gereksiz dağınıklığı ekler. Aynı şeyi otomatik olarak yapan bir bash betiğinin kullanılabilir olduğunu düşünüyorsanız başka bir cevap olarak yazacağım.
Pooyan Khosravi,

1
Şimdi olduğu gibi, bu kesinlikle en iyi cevap. Evet, çalışan hiçbir işlemin kilidin sahibi olmadığından emin olmak çok önemlidir. Bunu kontrol etmiştim, hiçbir şey çalışmıyordu ve eski kilidi nasıl sileceğimi bilmem gerekiyordu. Bu cevap tüm temelleri kapsıyor.
Lambart

9

Aynı anda birkaç paket uygulamasını / komutunu / aracını çalıştıramazsınız. Bazen, synaptic, apt-get veya paket güncelleme aracının arka planda çalıştığı anlamına gelir. Diğer paket araçlarını kapatın veya bitmelerini bekleyin. Ve dpkg çalışacak.


8

Biri de deneyebilir:

sudo apt-get install -f

Bozuk paketleri düzeltmek için:

Fix; kopmuş bağımlılıkları olan bir sistemi düzeltmeye çalışın. Bu seçenek, install / remove ile birlikte kullanıldığında, APT'nin olası bir çözümü belirlemesine izin vermek için herhangi bir paketi çıkartabilir. Paketler belirtilirse, bunların sorunu tamamen düzeltmesi gerekir. Bu seçenek bazen APT'yi ilk kez çalıştırırken gereklidir; APT'nin kendisi, bozuk paket bağımlılıklarının bir sistemde var olmasına izin vermez. Bir sistemin bağımlılık yapısının, manuel müdahale gerektiren (genellikle rahatsız edici paketlerin bazılarını kullanmak dselect(1)veya dpkg --removeortadan kaldırmak anlamına gelir) gerektirecek kadar bozuk olması mümkündür . Bu seçeneğin -m ile birlikte kullanılması bazı durumlarda hataya neden olabilir. Yapılandırma Öğesi: APT :: Get :: Fix-Broken.



1

Bir yaklaşım sadece bilgisayarı yeniden başlatmaktır. Bu benim için çalıştı.


0

Güncelleme işlemi kesintiye uğradıysa bu olabilir (bağlantınız kopmuş gibi). sudo suOturuma geri dönmek için ekranı root ( ) olarak kullanmayı deneyebilirsiniz .

screen -r

0

Burada bazı iyi cevaplar var, ama sadece dpkg kilit kullanıcısını bulmak için olmayan bir yöntem eklemek istedim.

Adım 1: dpkg'yi kimin kilitlediğini bulun:

Seçenek # 1: lsof kullanımı (her zaman makineye kurulmaz)

lsof /var/lib/dpkg/lock

Seçenek # 2: bash kullanımı

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

Adım 2: Geçerli dpkg kullanıcısı ile ne yapmak istediğinize karar verin

Böyle bir işlem yoksa, karar verecek bir şey yoktur, bir sonraki adıma geçin.

Aksi takdirde, süreci öldürmek ya da incelikle bitirmesine izin vermek istediğinize karar vermelisiniz. Eğer onu öldürmeye karar verirsen, kullan kill <pid>. Eğer süreç hala ölmeyecekse, onu kullanarak öldürmeyi düşünebilirsiniz kill -9 <pid>, ancak bazı tutarsızlıklar yaratabilir ve ne yaptığınızı bilmediğiniz sürece buna karşı tavsiyede bulunabilirim.

Adım 3: Kilit dosyasını kaldırın

sudo rm /var/lib/dpkg/lock

Adım 4: dpkg dahili durumunu düzelt

sudo dpkg --configure -a


0

Bizim durumumuzda çalışan bir işlem (PID) yoktu, bu yüzden VPS'yi durdurdum ve yeniden başlattım.

Sonra, kaldırılması gerekebilecek birkaç kilit dosyası var:

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

Sonra dpkgönerildiği şekilde düzeltebilirsiniz :

sudo apt update
sudo dpkg --configure -a
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.