Это Связанный на попытку выключить редко используемый сервер, если нет 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 подключился, даже если пользователь активно не использует общий ресурс, поэтому вам, вероятно, придется решить, что делать, исходя из этого случая.