автоматически сбрасывает sshfs при блокировке, перемонтирование не удается, если это не сделано вручную

автоматически сбрасывает sshfs при блокировке, перемонтирование не удается, если это не сделано вручную

У меня есть 2 локальных каталога на моем сервере, смонтированных на удаленном сервере. Локальный поддерживает соединения с autossh -M 23 -R 24:localhost:22 user@serverВ то время как удаленный монтируется с dirs-sshfs.sh

sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,cache_timeout=3600 [email protected]:/mnt/localdir1/ /home/user/dir1/ -p 24
sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,cache_timeout=3600 [email protected]:/mnt/localdir2/ /home/user/dir2/ -p 24

При блокировке используется sshfs-restart.sh для сброса соединения.

pkill -kill -f "sshfs"
fusermount -uz dir1
fusermount -uz dir2
./dirs-sshfs.sh

Все работает отлично, но мне нужно 1) заметить, что устройство зависло, и 2) вручную сбросить настройки.

Что делает это сложным, так это то, что когда он блокируется, даже ls домашнего каталога блокируется бесконечно до сброса. Из-за этого я отказался от управления этим со стороны удаленного сервера. На моей локальной стороне сервера, где поддерживается соединение autossh, у меня есть следующий скрипт, который почти работает. Он перехватывает, когда он сбивается, и пытается сбросить соединение, но не перемонтирует после размонтирования. Попытки поместить содержимое dirs-sshfs.sh в ssh-restart.sh и даже run-sshfs-restart.sh на удаленной стороне сервера, который содержал, ./sshfs-restart.sh &не заставили его работать. Тестовый скрипт (testsshfs2.sh) содержит , ls; echo; ls dir1; echo; ls dir2; echo; date; echoкоторый был создан, чтобы быть быстрым и простым способом проверить, все ли смонтировано/работает.

Это sshfsmanager.sh, запущенный с локального сервера внутри цикла while с командой sleep. В будущем, вероятно, его перенесут в cronjob

sshout=$(timeout 300 ssh user@host ./testsshfs2.sh)
# timeout duration probably doesnt need to be that long, but sometimes it does take 90+ sec to ls
# the remote dirs as they are network shares mounted to a vm that are then mounted across a ssh
# tunnel. Once this is working, that duration would be fine tuned. Also 100 is just an arbitrary
# number larger than ls | wc -l would provide. It should be updated to where it would catch if
# either of the mounts fail instead of only when both do. This timeout method is the only way
# ive found to get around the infinite ls lock.

if [ `echo "$sshout" | wc -l` -le 100 ]; then
  echo "$sshout" | wc -l
  ssh user@host ./sshfs-restart.sh
  #adding a "&& sleep 60" or using the run-sshfs-restart.sh script did not work

  echo sshfs restarted
else
  echo sshfs is fine
  echo "$sshout" | wc -l
fi

Большинство скриптов имеют журналирование, которое было удалено при размещении здесь (также как изменение портов и удаление пользователя/хоста). Большинство всех строк журналирования - это просто дата >> sshfsmanager.log

Локальная виртуальная машина работает под управлением Ubuntu 18.04.5, а удаленный сервер — это общий VPS под управлением Gentoo 5.10.27.

Связанный контент