![SSHFS wird automatisch zurückgesetzt, wenn es sich aufhängt. Das erneute Einhängen schlägt fehl, sofern es nicht manuell durchgeführt wird.](https://rvso.com/image/192222/SSHFS%20wird%20automatisch%20zur%C3%BCckgesetzt%2C%20wenn%20es%20sich%20aufh%C3%A4ngt.%20Das%20erneute%20Einh%C3%A4ngen%20schl%C3%A4gt%20fehl%2C%20sofern%20es%20nicht%20manuell%20durchgef%C3%BChrt%20wird..png)
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@server
wä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; echo
es 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