J'essaie de compresser un fichier image de machine virtuelle via un script, mais je veux être sûr que le fichier n'est pas accessible. Je pourrais vérifier si virt-manager est en cours d'exécution, car ce devrait être le seul programme à accéder à l'image, mais je ne sais pas s'il existe une meilleure façon de le faire. Je souhaite également que le script continue d'essayer jusqu'à ce que le fichier soit disponible pour être compressé. Je ne sais pas non plus comment faire.
#Check if virt-manager is running
if pgrep "virt-manager" > /dev/null
then
#re-run script until success
else
gzip -k < /home/brady/.vms/windows10/hdd.img > /media/backup/vms/windows10/hdd.$(date +"%F.%T).img.gz
Réponse acceptée :
Le lsof
La commande peut vous dire si un fichier est en cours d'utilisation. Vous pouvez mettre cela dans un while
boucle avec un sleep
pour le faire vérifier de temps en temps.
Par exemple :
Dans la fenêtre 1, vous pouvez exécuter sleep 10000 > /tmp/x
Dans la fenêtre 2, exécutez ce script :
#!/bin/bash
FILE=/tmp/x
while [ -n "$(lsof "$FILE")" ]
do
sleep 1
done
echo "File $FILE not in use"
Maintenant, lorsque vous appuyez sur control-C
pour interrompre la sleep
vous verrez la réponse "Fichier non utilisé" dans une seconde environ.