一連のコマンドを実行するbashスクリプトファイルがあります。
#!/bin/bash
umount /media/hdd1
umount /media/hdd2
something1
something2
ただし、ファイルの後半のコマンドはマウント解除されたHDDで機能するため、続行する前に、マウント解除が成功したことを確認する必要があります。
もちろん、umountが失敗したかどうかを確認して、1だけを終了できますが、それは理想的ではありません。
だから基本的に、私がやりたいことは、デバイスがビジーでなくなるまでumountコマンドを何とかしてからHDDをアンマウントしてスクリプトの実行を続けることです。
したがって、次のように機能します。
#!/bin/bash
umount /media/hdd1 # Device umounted without any problems continuing the script..
umount /media/hdd2 # Device is busy! Let's just sit around and wait until it isn't... let's say 5 minutes later whatever was accessing that HDD isn't anymore and the umount umounts the HDD and the script continues
something1
something2
ありがとうございました。
次のスクリプトが仕事をすると思います。 Sudo
(スーパーユーザー権限)で実行する必要があります。
doer
ループを持つ関数while
があります。これは、デバイスが指定されたマウントポイントにマウントされているかどうかをmountpoint
でチェックし、マウントされている場合はumount
。論理変数busy
がfalseの場合、while
ループは終了し、スクリプトは「何かをする」ことを開始できます。
#!/bin/bash
function doer() {
busy=true
while $busy
do
if mountpoint -q "$1"
then
umount "$1" 2> /dev/null
if [ $? -eq 0 ]
then
busy=false # umount successful
else
echo -n '.' # output to show that the script is alive
sleep 5 # 5 seconds for testing, modify to 300 seconds later on
fi
else
busy=false # not mounted
fi
done
}
########################
# main
########################
doer /media/hdd1
doer /media/hdd2
echo ''
echo 'doing something1'
echo 'doing something2'