Sto cercando di comprimere un file immagine di una macchina virtuale tramite uno script, ma voglio essere sicuro che non sia possibile accedere al file. Potrei controllare se virt-manager è in esecuzione, poiché dovrebbe essere l'unico programma che accede all'immagine, ma non so se esiste un modo migliore per farlo. Voglio anche che lo script continui a provare finché il file non è disponibile per la compressione. Non so nemmeno io come farlo.
#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
Risposta accettata:
Il lsof
comando può dirti se un file è in uso. Puoi inserirlo in un while
ciclo con un sleep
per farlo controllare ogni tanto.
Ad esempio:
Nella finestra 1 puoi eseguire sleep 10000 > /tmp/x
Nella finestra 2 esegui questo script:
#!/bin/bash
FILE=/tmp/x
while [ -n "$(lsof "$FILE")" ]
do
sleep 1
done
echo "File $FILE not in use"
Ora quando premi control-C
per interrompere il sleep
vedrai la risposta "File non in uso" entro un secondo circa.