Ich versuche, eine Image-Datei einer virtuellen Maschine über ein Skript zu komprimieren, aber ich möchte sicher sein, dass nicht auf die Datei zugegriffen wird. Ich könnte überprüfen, ob virt-manager läuft, da es das einzige Programm sein sollte, das auf das Image zugreift, aber ich weiß nicht, ob es einen besseren Weg gibt, dies zu tun. Ich möchte auch, dass das Skript weiter versucht, bis die Datei zum Komprimieren verfügbar ist. Ich weiß auch nicht, wie ich das machen soll.
#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
Akzeptierte Antwort:
Die lsof
Der Befehl kann Ihnen mitteilen, ob eine Datei verwendet wird. Sie können das in while
einfügen Schleife mit einem sleep
um es von Zeit zu Zeit zu überprüfen.
Zum Beispiel:
In Fenster 1 können Sie sleep 10000 > /tmp/x
ausführen
Führen Sie in Fenster 2 dieses Skript aus:
#!/bin/bash
FILE=/tmp/x
while [ -n "$(lsof "$FILE")" ]
do
sleep 1
done
echo "File $FILE not in use"
Wenn Sie jetzt control-C
drücken um den sleep
abzubrechen Innerhalb einer Sekunde sehen Sie die Antwort „Datei nicht in Gebrauch“.