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

Как изящно справиться с отключением общего ресурса Samba?

У меня есть веб-сервер Ubuntu 16.04 LTS, который монтирует файловый сервер Windows через Samba. Веб-сервер должен иметь возможность время от времени выполнять задачи, которые взаимодействуют с файлами на этом сервере. Однако недавно у нас произошел сбой в работе файлового сервера Windows, из-за которого веб-сервер начал работать очень плохо. Я хотел бы надеяться, что отключение монтирования просто приведет к немедленному сбою команд, которые пытаются взаимодействовать с этой папкой (что позволяет нам быстро поймать и обработать исключение), но вместо этого оказывается, что взаимодействия с монтированием происходят очень медленно вместо.

Вот запись в / etc / fstab для монтирования общего ресурса:

//<Windows server hostname>/TPA /mnt/TPA cifs username=tasker,password=<redacted>,domain=<our domain>,sec=ntlm,iocharset=utf8,sec=ntlm 0 0

Под "медленно" я имею в виду, что если я ls /mnt, команда выполняется примерно за 30 секунд, после чего я получаю следующее сообщение:

user@server:/mnt$ ls
ls: cannot access 'TPA': Host is down

Эту медлительность можно увидеть и в самом веб-приложении. Если возможно, я хотел бы иметь возможность настроить веб-приложение, чтобы определять, не работает ли общий ресурс, и обрабатывать это изящно, но я не хочу, чтобы это занимало 30 секунд с каждым запросом. Есть ли способ настроить вещи, чтобы с ними можно было работать более изящно?

Чтобы усложнить ситуацию, веб-приложение на самом деле находится внутри контейнера Docker, в который добавлен том, который указывает на /mnt, что может усугубить ситуацию, хотя я полагаю, что если я решу проблемы с хостом, то, надеюсь, контейнер аналогичным образом войдет в строй.

Любой совет будет очень признателен!

РЕДАКТИРОВАТЬ: Я добавлю, что на данный момент мы отключили некорректное монтирование и закомментировали строку из fstab, и это, кажется, делает ее «счастливой», но в идеале я бы предпочел решение, которое не является ручным.

Просто идеи ...

Я не знаю, как проверить, как /mnt ответит, когда вы получите к нему доступ. Но у меня есть идеи, как это точнее предсказать.

Вы могли бы использовать smbclient или nmap для попытки подключения к серверу. Или пусть что-то работает в фоновом режиме с cronи т. д., который выглядит нормально файл в / mnt - таким образом он ничего не замедляет при истечении времени ожидания. Если какой-либо из тестов не прошел, сообщите об этом веб-приложению.

test -d /mnt && echo true также не работает, когда файловый сервер не работает ... если это помогает. Но вам нужно подождать, пока он не истечет.

smbclient //host/share -Uuser password вернется почти мгновенно, если сервер не работает так что это не сильно замедлит. nmap тоже, но на самом деле он не пытается войти на файловый сервер.

Я надеюсь, что некоторые из них будут вам полезны.