dpkg: errore: il database di stato di dpkg è bloccato da un altro processo


69

Mi chiedevo solo se qualcuno potesse dirmi cosa significa:

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

Come posso eseguire sudo dpkg --configure -a manualmente?


Questa macchina è importante, vale a dire, puoi riavviarla? Dovrebbe risolvere questo vero problema
Huckle,

Risposte:


95

Prima corsa:

lsof /var/lib/dpkg/lock

Quindi assicurati che il processo non sia in esecuzione:

ps cax | grep PID

Se è in esecuzione:

kill PID
#wait
kill -9 PID

Assicurarsi che il processo sia completato:

ps cax | grep PID

Quindi rimuovere il file di blocco:

sudo rm /var/lib/dpkg/lock

Lascia che dpkg si risolva da solo:

sudo dpkg --configure -a

Dovresti andare bene dopo :)


7
Non si dovrebbero mai rimuovere manualmente i lockfile. Sono lì per un motivo. Per favore, usa questo solo come ultima risorsa. Prima prova a identificare e chiudere altre applicazioni usando la gestione dei pacchetti.
gertvdijk,

8
Se esiste effettivamente un processo che utilizza il file di blocco, probabilmente sarebbe meglio uccidere quel processo invece di rimuovere semplicemente il file di blocco. Dovresti riuscire a trovare il processo con lsof /var/lib/dpkg/lock.
Abe Voelker,

Un forte +1 per il commento di Abe. Non rimuovere mai un file di blocco senza uccidere tutti i processi con descrittori di file aperti.
Pooyan Khosravi,

1
@ Xen2050 IMO una nuova risposta aggiunge disordine inutile. Se pensi che uno script bash che fa automaticamente la stessa cosa sia utilizzabile, lo scrivo come un'altra risposta.
Pooyan Khosravi,

1
Allo stato attuale, questa è sicuramente la risposta migliore. Sì, è molto importante assicurarsi che nessun processo in esecuzione sia proprietario del blocco. Lo avevo già verificato, non c'era nulla in esecuzione e avevo bisogno di sapere come eliminare il vecchio blocco. Questa risposta copre tutte le basi.
Lambart,

9

Non è possibile eseguire più pacchetti applicazioni / comandi / strumenti contemporaneamente. A volte, significa che nel backgroung sono in esecuzione synaptic, apt-get o lo strumento di aggiornamento del pacchetto. Basta chiudere altri strumenti di pacchetto o attendere che siano finiti. E dpkg verrà eseguito.


8

Si potrebbe anche provare:

sudo apt-get install -f

Per correggere eventuali pacchetti rotti:

fissare; tenta di correggere un sistema con dipendenze rotte in atto. Questa opzione, se utilizzata con install / remove, può omettere qualsiasi pacchetto per consentire ad APT di dedurre una soluzione probabile. Se vengono specificati pacchetti, questi devono correggere completamente il problema. L'opzione è talvolta necessaria quando si esegue APT per la prima volta; Lo stesso APT non consente l'esistenza di dipendenze di pacchetti rotti su un sistema. È possibile che la struttura di dipendenza di un sistema possa essere così corrotta da richiedere un intervento manuale (che di solito significa usare dselect(1)o dpkg --removeeliminare alcuni dei pacchetti offensivi). L'uso di questa opzione insieme a -m può produrre un errore in alcune situazioni. Elemento di configurazione: APT :: Get :: Fix-Broken.




0

Questo può accadere se il processo di aggiornamento è stato interrotto (come se la connessione fosse persa). Puoi provare a utilizzare screen come root ( sudo su) per tornare alla sessione.

screen -r

0

Ci sono alcune buone risposte qui, ma volevo solo aggiungere un metodo non lsof per trovare l'utente del blocco dpkg

Passaggio 1: scopri chi sta bloccando dpkg:

Opzione n. 1: utilizzo di lsof (non sempre installato sulla macchina)

lsof /var/lib/dpkg/lock

Opzione 2: usare 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

Passaggio 2: decidere cosa si desidera fare con l'utente dpkg corrente

Se non esiste un processo simile, non c'è nulla da decidere, basta passare al passaggio successivo.

Altrimenti, devi decidere se vuoi terminare il processo o lasciarlo terminare con grazia. Se decidi di ucciderlo, basta usare kill <pid>. Se il processo continua a non morire, puoi prendere in considerazione l'idea di ucciderlo usando kill -9 <pid>, ma potrebbe creare alcune incoerenze e sconsiglio se non sai cosa stai facendo.

Passaggio 3: rimuovere il file di blocco

sudo rm /var/lib/dpkg/lock

Passaggio 4: correggere lo stato interno di dpkg

sudo dpkg --configure -a


0

Nel nostro caso non c'era alcun processo in esecuzione (PID), quindi ho fermato e riavviato il VPS.

Successivamente, ci sono diversi file di blocco che potrebbero dover essere rimossi:

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

Quindi puoi correggere dpkgcome suggerito:

sudo apt update
sudo dpkg --configure -a

A cosa servono i file di blocco?
Jarno
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.