
следующая проблема: у меня есть сервер, которому нужно смонтировать сетевой ресурс Windows, чтобы скопировать на него файл. Поэтому я добавил ресурс в , fstab
чтобы он был смонтирован при запуске.
//192.168.1.xx/share /mnt/networkshare cifs noperm,username=user,password=****** 0 0
Скрипт выполняет циклическое копирование файла на общий ресурс следующим образом:
while [ true ]
do
if [ -f /path/to/the/file ]
then
mv /path/to/the/file /mnt/networkshare
fi
done
Проблема в том, что компьютер с Windows выключается ночью при запуске утром. Во-первых, в это время нагрузка на сервер составляет 100% на одном ядре из-за скрипта while [true]. Во-вторых, иногда монтирование перестает работать после запуска компьютера с Windows. ( * * * * * mount -a
запускается crontab, чтобы снова смонтировать все). Файлы не копируются, и монтирование недоступно на сервере. Его нужно перезапустить.
Как мне убедиться, что монтирование всегда присутствует, пока компьютер включен? Может, мне нужно как-то размонтировать общий ресурс? Я могу размонтировать его каждую ночь, но что, если компьютер с Windows перезагрузится в течение дня? Как мне приостановить скрипт while [true], если монтирование отсутствует, чтобы снизить нагрузку на процессор ночью?
Спасибо за вашу помощь!
решение1
Вы можете проверить крепление перед попыткой перемещения:
df | grep "/mnt/networkshare" |grep -v grep >/dev/null; r=${?}
if [ ${r} -eq 0 ]
then
mv /path/to/the/file /mnt/networkshare
fi
также добавление sleep
команды в процесс может смягчить проблему 100% загрузки ЦП. Забивать процесс без перерыва — не лучший подход.