web-dev-qa-db-fra.com

Je dois vérifier le verrouillage de dpkg avant d'installer des applications dans un script

J'ai un problème avec un script que j'ai écrit pour installer un tas d'applications, essentiellement parce qu'il parcourt un tableau de noms d'applications pour l'installer, il les vérifie en effectuant:

dpkg -l | grep -q $i

et basé sur le $? va soit installer ou ignorer l'application. Le problème est que pour quelques éléments, il échoue à cause d'un verrou dpkg, la quasi-totalité de la liste fonctionne; une demi-douzaine seulement échoue mais fonctionne si vous exécutez à nouveau le script.

Est-il possible d'attendre que dpkg se termine avant d'exécuter 'apt-get install'?

Pour l'instant, j'ai ajouté un "sommeil de 0.5" entre les 2 lignes et cela a arrêté le problème mais est évidemment moche et plus lent.

Merci Noki

4
Noki

Pour identifier les processus utilisant des fichiers ou des sockets, vous pouvez utiliser la commande fuser (voir man fuser pour plus d'informations). Dans le cas de dpkg, vous pouvez vérifier le verrou en tant que root à l'aide de la commande suivante:

fuser /var/lib/dpkg/lock
8
Radu Rădeanu