dpkg: Fehler: Die dpkg-Statusdatenbank ist von einem anderen Prozess gesperrt


68

Ich habe mich nur gefragt, ob mir jemand sagen könnte, was das bedeutet:

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:~$ 

Wie laufe ich sudo dpkg --configure -a manuell?


Ist diese Maschine wichtig, das heißt, können Sie sie neu starten? Sollte dieses Problem schnell beheben
Huckle

Antworten:


94

Erster Lauf:

lsof /var/lib/dpkg/lock

Stellen Sie dann sicher, dass der Prozess nicht ausgeführt wird:

ps cax | grep PID

Wenn es läuft:

kill PID
#wait
kill -9 PID

Stellen Sie sicher, dass der Vorgang abgeschlossen ist:

ps cax | grep PID

Dann entfernen Sie die Sperrdatei:

sudo rm /var/lib/dpkg/lock

Lass dpkg sich selbst reparieren:

sudo dpkg --configure -a

Du solltest danach in Ordnung sein :)


7
Man sollte Sperrdateien niemals manuell entfernen. Sie sind aus einem bestimmten Grund da. Bitte verwenden Sie dies nur als allerletzten Ausweg. Versuchen Sie zunächst, andere Anwendungen mithilfe der Paketverwaltung zu identifizieren und zu schließen.
gertvdijk

8
Wenn es tatsächlich einen Prozess gibt, der die Sperrdatei verwendet, ist es wahrscheinlich besser, diesen Prozess abzubrechen, als nur die Sperrdatei zu entfernen. Sie sollten in der Lage sein, den Prozess mit zu finden lsof /var/lib/dpkg/lock.
Abe Voelker

Ein starkes +1 für Abes Kommentar. Entfernen Sie niemals eine Sperrdatei, ohne alle Prozesse zu beenden, für die Dateideskriptoren geöffnet sind.
Pooyan Khosravi

1
@ Xen2050 IMO eine neue Antwort fügt unnötige Unordnung. Wenn Sie der Meinung sind, dass ein Bash-Skript, das dasselbe automatisch ausführt, verwendet werden kann, schreibe ich es als eine andere Antwort.
Pooyan Khosravi

1
Nach heutigem Stand ist dies definitiv die beste Antwort. Ja, es ist sehr wichtig sicherzustellen, dass kein laufender Prozess die Sperre besitzt. Ich hatte das bereits überprüft, es lief nichts und ich musste wissen, wie man das alte Schloss löscht. Diese Antwort deckt alle Grundlagen ab.
Lambart,

9

Sie können nicht mehrere Paketanwendungen / Befehle / Tools gleichzeitig ausführen. Manchmal bedeutet dies, dass synaptic, apt-get oder das Paketaktualisierungstool im Hintergrund ausgeführt werden. Schließen Sie einfach andere Pakettools oder warten Sie, bis sie fertig sind. Und dpkg läuft.


8

Man könnte auch versuchen:

sudo apt-get install -f

So beheben Sie beschädigte Pakete:

Fix; Versuchen Sie, ein System mit fehlerhaften Abhängigkeiten zu korrigieren. Wenn diese Option mit install / remove verwendet wird, können alle Pakete weggelassen werden, damit APT eine wahrscheinliche Lösung ableiten kann. Wenn Pakete angegeben sind, müssen diese das Problem vollständig beheben. Diese Option ist manchmal erforderlich, wenn APT zum ersten Mal ausgeführt wird. APT selbst lässt nicht zu, dass fehlerhafte Paketabhängigkeiten auf einem System vorhanden sind. Es ist möglich, dass die Abhängigkeitsstruktur eines Systems so beschädigt ist, dass ein manueller Eingriff erforderlich ist (was normalerweise bedeutet , dass einige der fehlerhaften Pakete verwendet dselect(1)oder entfernt dpkg --removewerden). Die Verwendung dieser Option zusammen mit -m kann in einigen Situationen zu einem Fehler führen. Konfigurationselement: APT :: Get :: Fix-Broken.




0

Dies kann passieren, wenn der Upgrade-Prozess unterbrochen wurde (als ob Ihre Verbindung unterbrochen wurde). Sie können versuchen, screen als root ( sudo su) zu verwenden, um in die Sitzung zurückzukehren.

screen -r

0

Hier gibt es einige gute Antworten, aber ich wollte nur eine andere Methode hinzufügen, um den Benutzer der dpkg-Sperre zu finden

Schritt 1: Finden Sie heraus, wer dpkg sperrt:

Option 1: Verwenden von lsof (nicht immer auf dem Computer installiert)

lsof /var/lib/dpkg/lock

Option 2: Verwenden von Bash

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

Schritt 2: Entscheiden Sie, was Sie mit dem aktuellen dpkg-Benutzer tun möchten

Wenn es keinen solchen Prozess gibt, muss nichts entschieden werden. Fahren Sie einfach mit dem nächsten Schritt fort.

Andernfalls müssen Sie entscheiden, ob Sie den Prozess beenden oder ordnungsgemäß beenden möchten. Wenn Sie es töten möchten, verwenden Sie einfach kill <pid>. Wenn der Prozess immer noch nicht zum Erliegen kommt, können Sie in Betracht ziehen, ihn mit zu töten. Es kill -9 <pid>kann jedoch zu gewissen Inkonsistenzen kommen, und ich rate davon ab, es sei denn, Sie wissen, was Sie tun.

Schritt 3: Entfernen Sie die Sperrdatei

sudo rm /var/lib/dpkg/lock

Schritt 4: Fixieren Sie den internen Zustand von dpkg

sudo dpkg --configure -a


0

In unserem Fall gab es keinen laufenden Prozess (PID), also habe ich den VPS hart gestoppt und neu gestartet.

Als Nächstes müssen möglicherweise mehrere Sperrdateien entfernt werden:

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

Dann können Sie dpkgwie vorgeschlagen beheben :

sudo apt update
sudo dpkg --configure -a
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.