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

Есть ли способ определить, есть ли в общем ресурсе SAMBA открытые файлы?

Это Связанный на попытку выключить редко используемый сервер, если нет SSH-соединений или открытых файлов.

Как я могу определить в сценарии оболочки (задание cron в Linux), есть ли в каком-либо из текущих общих ресурсов samba открытые файлы?

Если ваш сервер samba настроен на использование блокировки файлов, что, вероятно, так и есть, я полагаю, вы могли бы использовать 'smbstatus -L' для перечисления блокировок, а затем grep для вывода типа блокировки, который вы ищете (EXCLUSIVE, BATCH), если вы знали, что вас интересуют только определенные виды замков.

Что-то вроде:

smbstatus -L | grep ЭКСКЛЮЗИВ

а затем проверьте возвращаемое значение ($?) в сценарии задания cron.

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

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

lsof | grep /path/to/share должен показывать используемые файлы.

Ответ cense хорош, и его мнение о замках применимо к этому ответу. Samba также допускает статус только для чтения (я думаю, что он отображается как RD_ONLY), а также отображает записи для каталогов, открытых в проводнике Windows, поэтому вам нужно решить, какие блокировки вы хотите игнорировать / на которых вы хотите сосредоточиться.

Я считаю, что результат smbstatus является No machines connected., если, ну, машины не подключены, вы могли бы использовать что-то вроде smbstatus|grep No\ machines\ connected && shutdown для выключения, когда ничего не подключено.

Насколько мне известно (сейчас нет доступа к серверу Samba), если у вас есть общий ресурс Samba, смонтированный в Windows, smbstatus покажет, что компьютер с Windows подключился, даже если пользователь активно не использует общий ресурс, поэтому вам, вероятно, придется решить, что делать, исходя из этого случая.