Я использую SSHFS с reconnect
атрибут. Это хорошо работает, когда я приостанавливаю ноутбук и запускаю его снова. Но проблема состоит в том, когда я беру ноутбук где-нибудь - значение другого IP, и другое соединение (мог бы быть Wi-Fi или Ethernet).
Смонтированная папка SSHFS просто замораживает и также замораживает все приложения, которые использовали ее. И единственное решение его, которое я имею до сих пор, состоит в том, чтобы использовать
sudo umount -f /mnt/sshfs_folder
Который нигде не является близко к тому, чтобы быть хорошим решением, но до сих пор единственным, которое работает. Существует ли путь, как заставить SSHFS беспрепятственно заботиться об этой проблеме, которую после приостанавливает настолько изменяющееся сетевое соединение, не вызовет проблем?
О, и у меня есть Ubuntu 14.04, но я предполагаю, что это SSHFS конкретный.
Более полный ответ здесь: SSHFS - автоматический снова соединяются .
Короче говоря, используйте:
sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 server:/path/to/mount`
Я написал сценарий оболочки под названием sshfs-reconnect
со следующим:
while true
do
sshfs -f -o ConnectTimeout=3,ConnectionAttempts=1,ServerAliveInterval=5,ServerAliveCountMax=3 $@
echo "disconnected from $@"
sleep 3
echo "retry $@ ..."
done
Если я оставлю его работающим в фоновом режиме, он будет вести себя в большинстве случаев так, как хотелось бы:
Подробности об этом решении:
-o reconnect
, потому что я не хочу, чтобы sshfs пытался переподключиться бесконечно, так как это приводит к тому, что любой процесс, ожидающий в смонтированной файловой системе, зависает навсегда. Вместо этого я позволяю sshfs отключаться по истечении определенного тайм-аута и позволяю этим ожидающим процессам корректно завершиться. ServerAliveInterval=5,ServerAliveCountMax=3
говорят, что ssh проверяет каждые 5 секунд, отвечает ли удаленный сервер. Если он не получает ответа после 3 таких проверок, то автоматически отключается. Таким образом, любой процесс, ожидающий этого монтирования, должен зависнуть максимум на 15 секунд.ConnectTimeout=3,ConnectionAttempts=1
необходимы, так как в противном случае ssh будет очень долго ждать при попытке переустановить соединения, что снова приведет к зависанию других процессов, если они попытаются получить доступ к монтированию во время в этот раз.