web-dev-qa-db-fra.com

Comment faire patienter jusqu'à ce qu'un périphérique ne soit plus occupé?

J'ai un fichier de script bash où j'exécute un tas de commandes.

#!/bin/bash
umount /media/hdd1
umount /media/hdd2
something1
something2

Mais comme les commandes plus loin dans le fichier fonctionnent avec le disque dur démonté, je dois m'assurer que le démontage a réussi avant de continuer.

Je peux bien sûr vérifier si l'umount a échoué et simplement quitter 1, mais ce n'est pas idéal.

En gros, ce que je voudrais faire, c’est que la commande umount attende jusqu’à ce que le périphérique ne soit plus occupé, puis démonte le disque dur et continue à exécuter le script.

Cela fonctionnerait donc comme ceci:

#!/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

Je vous remercie.

3
Askerman

Je pense que le script suivant fera le travail. Il doit être exécuté avec Sudo(autorisations de superutilisateur).

Il existe une fonction doeravec une boucle whilequi vérifie avec mountpointsi un périphérique est monté au point de montage spécifié et essaie de le démonter avec umountname__. Lorsque la variable logique busyest définie sur false, la boucle whileest terminée et le script peut commencer à "effectuer certaines tâches".

#!/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'
3
sudodus