Snažím se komprimovat soubor obrazu virtuálního stroje pomocí skriptu, ale chci se ujistit, že k souboru není přístup. Mohl bych zkontrolovat, zda běží virt-manager, protože by to měl být jediný program, který přistupuje k obrazu, ale nevím, jestli existuje lepší způsob, jak to udělat. Také chci, aby skript pokračoval v pokusech, dokud nebude soubor dostupný ke komprimaci. Taky nevím, jak to udělat.
#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
Přijatá odpověď:
lsof
příkaz vám může říci, zda je soubor používán. Můžete to vložit do while
smyčka s sleep
aby se to kontrolovalo tak často.
Například:
V okně 1 můžete spustit sleep 10000 > /tmp/x
V okně 2 spusťte tento skript:
#!/bin/bash
FILE=/tmp/x
while [ -n "$(lsof "$FILE")" ]
do
sleep 1
done
echo "File $FILE not in use"
Nyní, když stisknete control-C
přerušit sleep
během jedné sekundy uvidíte odpověď „Soubor se nepoužívá“.