SSHFS wird automatisch zurückgesetzt, wenn es sich aufhängt. Das erneute Einhängen schlägt fehl, sofern es nicht manuell durchgeführt wird.

SSHFS wird automatisch zurückgesetzt, wenn es sich aufhängt. Das erneute Einhängen schlägt fehl, sofern es nicht manuell durchgeführt wird.

ich habe 2 lokale Verzeichnisse auf meinem Server, die auf einem Remote-Server gemountet sind. Lokale Verzeichnisse halten Verbindungen aufrecht, autossh -M 23 -R 24:localhost:22 user@serverwährend Remote-Verzeichnisse mit dirs-sshfs.sh gemountet werden.

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

Wenn es blockiert, wird sshfs-restart.sh verwendet, um die Verbindung zurückzusetzen

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

Das funktioniert alles einwandfrei, aber ich muss 1) feststellen, dass es sich aufgehängt hat und 2) es manuell zurücksetzen.

Was das Ganze schwierig macht, ist, dass, wenn es sich aufhängt, sogar ls des Home-Verzeichnisses unendlich gesperrt ist, bis es zurückgesetzt wird. Aus diesem Grund habe ich es aufgegeben, dies von der Remote-Serverseite aus zu verwalten. Auf meiner lokalen Serverseite, wo die Autossh-Verbindung aufrechterhalten wird, habe ich das folgende Skript, das fast funktioniert. Es erkennt, wenn es fehlschlägt, und versucht, die Verbindung zurückzusetzen, wird aber nach dem Unmounten nicht erneut gemountet. Ich habe versucht, den Inhalt von dirs-sshfs.sh in ssh-restart.sh einzufügen, und selbst run-sshfs-restart.sh auf der Remote-Serverseite, das es enthielt, ./sshfs-restart.sh &hat es nicht zum Laufen gebracht. Das Testskript (testsshfs2.sh) enthält ls; echo; ls dir1; echo; ls dir2; echo; date; echoes und wurde erstellt, um schnell und einfach zu prüfen, ob alles gemountet/funktioniert ist.

Dies ist sshfsmanager.sh, das vom lokalen Server in einer While-Schleife mit einem Sleep-Befehl ausgeführt wird. In Zukunft wird es wahrscheinlich in einen Cronjob verschoben

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

Die meisten Skripte haben Protokolle, die beim Einfügen hier entfernt wurden (ebenso wie Portänderungen und das Entfernen von Benutzer/Host). Die meisten Protokollzeilen sind nur Datum >> sshfsmanager.log

Auf der lokalen VM läuft Ubuntu 18.04.5 und auf dem Remote-Server ein gemeinsam genutzter VPS mit Gentoo 5.10.27

verwandte Informationen