dpkg: erreur: la base de données d'état dpkg est verrouillée par un autre processus

69

Je me demandais simplement si quelqu'un pouvait me dire ce que cela signifie:

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

Comment puis-je courir sudo dpkg --configure -a manuellement?

reidar
la source
Est-ce que cette machine est importante, c'est-à-dire, pouvez-vous la redémarrer? Devrait résoudre ce problème très vite
Huckle

Réponses:

95

Première exécution:

lsof /var/lib/dpkg/lock

Ensuite, assurez-vous que ce processus ne fonctionne pas:

ps cax | grep PID

Si cela fonctionne:

kill PID
#wait
kill -9 PID

Assurez-vous que le processus est terminé:

ps cax | grep PID

Ensuite, supprimez le fichier de verrouillage:

sudo rm /var/lib/dpkg/lock

Laisser dpkg se réparer:

sudo dpkg --configure -a

Vous devriez aller bien après :)

assistant
la source
7
Il ne faut jamais supprimer lockfiles manuellement. Ils sont là pour une raison. S'il vous plaît, utilisez-le uniquement en dernier recours. Essayez d’abord d’identifier et de fermer d’autres applications à l’aide de la gestion des packages.
gertvdijk
8
Si un fichier utilise réellement le fichier de verrouillage, il serait probablement préférable de le supprimer plutôt que de simplement le supprimer. Vous devriez pouvoir trouver le processus avec lsof /var/lib/dpkg/lock.
Abe Voelker
Un fort +1 pour le commentaire de Abe. Ne supprimez jamais un fichier de verrouillage sans détruire tous les processus comportant des descripteurs de fichier ouverts.
Pooyan Khosravi
1
@ Xen2050 IMO une nouvelle réponse ajoute un fouillis inutile. Si vous pensez qu'un script bash faisant automatiquement la même chose est utilisable, je l'écrirai comme une autre réponse.
Pooyan Khosravi
1
Dans l’état actuel des choses, c’est définitivement la meilleure réponse. Oui, il est très important de s’assurer qu’aucun processus en cours ne possède le verrou. J'avais déjà vérifié cela, rien ne fonctionnait et j'avais besoin de savoir comment supprimer l'ancien verrou. Cette réponse couvre toutes les bases.
Lambart
9

Vous ne pouvez pas exécuter plusieurs packages applications / commandes / outils en même temps. Parfois, cela signifie que synaptic, apt-get ou l’outil de mise à jour du paquet s’exécute en arrière-plan. Fermez simplement les autres outils de package ou attendez qu'ils soient terminés. Et dpkg s'exécutera.

toine
la source
8

On pourrait aussi essayer:

sudo apt-get install -f

Pour réparer les paquets cassés:

Réparer; tenter de corriger un système avec des dépendances brisées en place. Cette option, lorsqu'elle est utilisée avec install / remove, peut omettre tous les packages pour permettre à APT de déduire une solution probable. Si des packages sont spécifiés, ceux-ci doivent résoudre complètement le problème. Cette option est parfois nécessaire lors de la première exécution d’APT. APT lui-même n'autorise pas les dépendances de paquetage cassées à exister sur un système. Il est possible que la structure de dépendance d'un système puisse être tellement corrompue qu'elle nécessite une intervention manuelle (ce qui signifie généralement utiliser dselect(1)ou dpkg --removesupprimer certains des packages en cause). L'utilisation de cette option avec -m peut générer une erreur dans certaines situations. Élément de configuration: APT :: Get :: Fix-Broken.

lame19899
la source
3

Suivre devrait aider:

sudo rm /var/lib/dpkg/lock

sudo dpkg --configure -a
Deepak Singhvi
la source
Merci, cela fonctionne pour moi
Thavaprakash Swaminathan
1

Une approche consiste simplement à redémarrer le PC. Cela a fonctionné pour moi.

PrincebillyGK
la source
0

Cela peut arriver si le processus de mise à niveau a été interrompu (comme si votre connexion avait été perdue). Vous pouvez essayer d'utiliser screen en tant que root ( sudo su) pour revenir dans la session.

screen -r
Xeoncross
la source
0

Il y a quelques bonnes réponses ici, mais je voulais juste ajouter une méthode non-lsof pour trouver l'utilisateur du verrou dpkg

Étape 1: Découvrez qui verrouille dpkg:

Option n ° 1: Utiliser lsof (pas toujours installé sur la machine)

lsof /var/lib/dpkg/lock

Option n ° 2: Utiliser 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

Étape 2: décidez ce que vous voulez faire avec l'utilisateur actuel de dpkg

S'il n'y a pas un tel processus, il n'y a rien à décider, passez simplement à l'étape suivante.

Sinon, vous devez décider si vous voulez arrêter le processus ou le laisser se terminer normalement. Si vous décidez de le tuer, utilisez simplement kill <pid>. Si le processus ne meurt toujours pas, vous pouvez envisager de le tuer en utilisant kill -9 <pid>, mais il peut créer certaines incohérences et je vous le déconseille à moins que vous ne sachiez ce que vous faites.

Étape 3: Supprimer le fichier de verrouillage

sudo rm /var/lib/dpkg/lock

Étape 4: Correction de l'état interne de dpkg

sudo dpkg --configure -a

Daniel Trugman
la source
0

Dans notre cas, il n'y avait pas de processus en cours (PID), alors j'ai arrêté et redémarré le VPS.

Ensuite, il faudra peut-être supprimer plusieurs fichiers de verrouillage:

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

Ensuite, vous pouvez réparer dpkgcomme suggéré:

sudo apt update
sudo dpkg --configure -a
Jessupi
la source
A quoi servent les fichiers de verrouillage?
jarno
@jarno Les fichiers de verrouillage ne sont que des métadonnées qui empêchent les processus de s'exécuter ou de se remplacer, etc. Ils sont censés être nettoyés une fois le processus terminé, mais si un processus est suspendu, les fichiers de verrouillage risquent de rester indéfiniment.
jessuppi