Я хочу, чтобы sshfs
соединения разрывались по истечении некоторого времени, максимум через час, а это означает запуск at
команды fusermount -u
в той же команде или скрипте, которые я использую для запуска sshfs
монтирования.
Однако я заметил, что команда fusermount
может завершиться ошибкой, если файлы используются, хотя я хочу, at
чтобы она работала независимо от того, есть ли в соединении еще открытые файлы или нет.
По моему опыту, единственный надежный способ — запустить fusermount
команды от имени пользователя root или разорвать sshfs
соединение с помощью kill
команды.
Есть ли другой способ принудительного отключения без запуска от имени root? Проблема в том, что я могу не находиться у терминала, когда файлы все еще открыты, но в целях безопасности соединение должно быть разорвано, если я не отменю команду at
.
решение1
Если вы хотите только освободить точку монтирования и не заботитесь о завершении соединения SSH, вы можете запустить fusermount -z /mount/point
. Это выполнит ленивое размонтирование: точка монтирования больше не связана с монтированием, но монтирование не исчезнет, пока все открытые файлы на этом монтировании не будут закрыты.
Если вы хотите только закрыть SSH-соединение и не заботитесь о монтировании, вы можете просто убить процесс сервера SFTP. В этом и заключается прелесть FUSE: убейте процесс, предлагающий услугу, и он исчезнет. Монтирование не может заблокировать системный ресурс. Процессы, которые попытаются получить доступ к файловым системам, получат ошибку (ENOTCONN ”Transport endpoint is not connected”).
Если вы хотите завершить процессы, у которых открыты файлы в этой файловой системе, вы можете использовать командуfuser
команда (никакого отношения к FUSE, за исключением того, что F является первой буквой слова «file»).
fuser -k /mount/point