Platte automatisch mounten

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Da an einem Remotestandort eine instabile Internetverbindung ist, habe ich ein Pythonscript gebastelt, das alle paar Minuten prüft, ob der Mount noch da ist und gegebenenfalls neu mountet:

    Vielleicht hilft es jemandem, der auch solche Probleme hat.

    Das Script starte ich mit Verzögerung ganz altmodisch via /etc/rc.local:

    /usr/bin/sleep 60 && /usr/bin/python3 /home/pi/check_mount_platte.py > /var/log/check_mount_platte.log 2>&1

    Die Datei /etc/smbcredentials sieht so aus, gehört root, Berechtigung 600:

    Code
    user=smbuser
    password=geheim
  • Halloween rückt näher, und Verkleidungen sind deshalb naheliegend, aber das Kostüm sollte doch gruselig sein, und nicht so wunderschön wie Python. 😜


    Was ich damit sagen will: das ist nicht wirklich Python, sondern ein Shell-Skript das sich als Python verkleidet hat.


    `os.system()` — was man nicht verwenden sollte — in einer eigentlich überflüssigen Rolle, `print()` als `echo`, `time.sleep()` als `sleep`, und ein bisschen ``if``/``else`` als ``if``/``else``/``fi`` und man erkennt 1:1 was das eigentlich sein wollte (ungetestet):

    Da ist nichts was Python tatsächlich zu diesem Programm an Mehrwert beitragen würde.


    Das ``grep`` ist im Grunde in der Form falsch, weil die Punkte ja nicht nur Punkte matchen sondern jedes beliebige Zeichen. Die müsste man also entweder escapen, oder ``grep`` mit ``-F``/``--fixed-strings`` aufrufen. In einem Python-Programm bräuchte man das gar nicht, weil ein Test auf enthaltensein von einer Teilzeichenkette in Python kein externes Programm benötigt.


    Was an dem Python-Skript auch ein bisschen komisch ist: die ganzen Zeilen wo ein Zeichenkettenliteral an einen Namen gebunden wird, und der dann nur in der nächsten Zeile als einziges Argument von einem `print()` verwendet wird, statt da einfach direkt ein `print()` mit dem Text zu schreiben.


    Die Verkettung der Aufrufe `MountHost` → `CheckPing` würde ich so nicht machen. Das `CheckPing` 10 Minuten blockierend warten kann, zwei Aufrufe vom Hauptprogramm entfernt, ist IMHO unnötig schwer zu durchschauen. Im Grunde auch in `MountHost` bereits. Das grobe Zeitverhalten sollte an einer Stelle im Code zu verstehen sein.


    Ebenfalls ungetestet:

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors

  • Jup. Das ist das ``if __name__ == "__main__":`` aus Python. Man kann dann Funktionen wo anders wiederverwenden und/oder ein Testskript schreiben um so etwas wie Unit-Tests auch für Bash zu machen.

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors