Назад | Перейти на главную страницу

Фрагмент оболочки Bash, чтобы проверить, не занят ли смонтированный общий ресурс Samba

#!/bin/sh

mount -t cifs //192.168.5.90/share -o password='' /mnt/tera_nas

rsync -av --super --delete --recursive /home/ /mnt/tera_nas/home/

# sleep 5m (i want to avoid using this)

# Bash shell snippet to check if mounted Samba share is not busy before issuing umount command

umount /mnt/tera_nas/

вы можете использовать "fuser -m mountpoint", чтобы узнать, есть ли у кого-нибудь доступ к пути.

вы можете lsof увидеть, есть ли у него открытые файловые дескрипторы

Я бы просто лениво размонтировал его, используя флаг -l. Это удалит точку монтирования из файловой системы (так что никакие новые операции не могут начаться) и завершит надлежащее размонтирование, когда она больше не будет занята.

Пусть umount сделает всю работу за вас:

while ! $(umount /mnt/tera_nas/ 2>/dev/null)
do
    echo "not yet"
    sleep 5m
done
echo "now it is"

Вы можете сократить время сна, но я бы не стал его исключать. Здесь он играет иную роль, чем в вашем вопросе.

2Деннис Уильямсон:

Я бы предпочел использовать

umount -l /mnt/tera_nas

в конце.

Использовать automount чтобы сделать это автоматически, точка монтирования /mnt/tera_nas/home/ будет автоматически монтироваться при обращении к нему, а затем размонтироваться, когда он больше не нужен.

# /etc/auto.master
/mnt auto.mnt

# /etc/auto.mnt
tera_nas -t cifs,password='' ://192.168.5.90/share

затем service autofs restart