[Frage:] Darf ich zum Startzeitpunkt des "autorun.sh" Scripts per SSH ein "/sbin/reboot" ausführen?

  • Ich frage deshalb, weil zu diesem Zeitpunkt ja noch weitere Prozesse gestartet werden. Hintergrund ist mein TS-464 mit einer 10GbE NIC (nicht von QNAP), die in sehr seltenen Fällen (ca. 1 pro 20 mal) nicht erkannt wird. Ich starte das NAS täglich jeden Morgen per WOL, was auch sehr gut funktioniert. Die 10GbE NIC ist mit einem QSW-2104-2T verbunden. Dieser zeigt den Standby der Karte mit der orangefarbene LED an - leider auch, wenn die Karte nicht erkannt wurde (müsste dann grün leuchten). Meine Idee ist daher, bei nicht vorhandenen Gateway einen reboot durchzuführen (Start/Reboot Schleife wird verhindert). Die Frage ist: Kann dadurch das Dateisystem leiden, wenn beim aktivwerden des autorun.sh Scripts ein reboot erfolgt?

  • Hallo,

    q.tip (geiler Name!) vielleicht versuchst Du es mit folgendem Tip:


    Ich habe in meinem Haupt-NAS TS-1277 ebenfalls eine 10GbE NIC (nicht von QNAP) eingebaut, welche leider nicht WOL unterstützt.

    Daher habe ich das so eingerichtet:

    Das WOL wird auf einem LAN-Anschluß von QNAP ausgeführt.

    Alle anderen Operationen dann mit der 10GbE NIC (nicht von QNAP).

    Verbunden sind beide Schnittstellen mit dem selben Switch.

    Logischerweise haben beide Schnittstellen unterschiedliche Adressen.


    Versuch macht kluch ;)

    Grüßle

    TVR

  • Danke für den Tip! Hab ich bisher noch nicht probiert. Ich würde gern erst mal meine Idee abchecken.

  • Ja, kannst du machen.

    Beim Shutdown werden alle Prozesse, insbesondere auch der des Dateisystems, sauber heruntergefahren. Daher darf dadurch kein Schaden entstehen.


    Übrigens, falls du doch was falsch machst und eine Endlos-Shutdown-Schleife einbaust, musst du den 3-Sekunden- oder 10-Sekunden-Reset (weiß gerade nicht, welchen) machen, damit autorun.sh wieder deaktiviert wird. Sieh zu, dass du dann dein Default-Admin-Passwort hast.

  • Danke für deine Meinung.

    Dazu wollte ich noch einmal etwas klarstellen: Es soll bei fehlendem Gateway ein "reboot" durchgeführt werden, kein "Shutdown". Wenn mein Script per autorun.sh startet, dann finden danach immer noch weitere aufstartende Prozesse statt. In meinem Fall: Plex, Qufirewall und Initialisierung der USV und wer weiß, was noch. Was ist mit diesen aufstartenden Prozessen, wenn vorher ein "reboot" in meinem Script startet? Verhindert "reboot" das Aufstarten weitere Prozesse? Gefahr für Datenbanken?

    Ich hab es jetzt erst mal so gelöst:

    Code
    # Schleife, bis der Bootvorgang beendet ist
    while [ "$(getcfg "System" "Booting" -f /etc/config/uLinux.conf)" != "0" ]; do
        # NAS startet noch, 10 Sekunden warten...
        sleep 10
    done
    /sbin/reboot
    exit

    PS: Eine Bootschleife könnte ich einfach durch temporäres Verbinden der Schnittstellen eth0 oder eth1 mit dem Switch verhindern, wenn's passieren sollte und ich zu hause bin. Ich könnte auch dauernd eth2 (10GbE) und eth1 (2,5GbE) mit dem Switch verbinden. Die Firewall Regeln müssten dann für alle Schnittstellen gelten und bei der Vergabe des Standardgateways müsste man dann eth2 setzen mit Überlaufmöglichkeit auf eth1. Weiß nicht, ob das möglich ist. Was sagt Plex dazu? Plex möchte ja wissen, über welche Schnittstelle ich verbunden bin...

  • Es soll bei fehlendem Gateway ein "reboot" durchgeführt werden, kein "Shutdown"

    Ein Reboot ist ein Shutdown mit anschließendem automatischem Neustart. Für deine konkrete Fragestellung ist es also dasselbe.

    Was ist mit diesen aufstartenden Prozessen, wenn vorher ein "reboot" in meinem Script startet? Verhindert "reboot" das Aufstarten weitere Prozesse? Gefahr für Datenbanken?

    Das hängt letztlich von dem Programm ab, das den neuen Prozess startet.

    Beim Shutdown wird allen normalen (s. u.) Prozessen ein SIGTERM-Signal geschickt. Dies ist eine freundliche Bitte sich zu beenden. Eine kurze Gnadenfrist später (einige Sekunden) wird allen dann laufenden Prozessen, egal ob nach dem ersten Signal noch nicht beendet oder neu gestartet, ein SIGKILL-Signal geschickt, womit der Prozess sofort beendet und aus dem System entfernt wird.

    SIGTERM kann ein Prozess abfangen. Dies sollte er tun, um laufende Operationen, insbesondere Datei-Operationen, sauber abzuschließen, so dass sich danach alles im konsistenten Zustand befindet. Und er sollte dann natürlich keine neuen Prozesse für neue Aufgaben mehr starten.

    SIGKILL kann nicht abgefangen werden. Der Zustand kann nicht bereinigt werden. Ein Prozess mit Schreibzugriffen auf Dateien kann diese in beschädigtem Zustand zurücklassen.

    Bei ein paar Prozessen wird hiervon abgewichen, Prozesse für Dateisysteme. Diese dürfen sich nicht beim ersten SIGTERM beenden, da dann womöglich andere Prozesse ihre Aufräumarbeiten mangels Dateisystem nicht durchführen könnten. Stattdessen werden erst zu einem späteren Zeitpunkt des Shutdowns alle Dateisysteme sorgsam abgemeldet.

    Ob deine Programme beim Shutdown sauber funktionieren, hängt also von deren Implementierung ab.

    Shell-Skripte brechen bei SIGTERM direkt ab und die Shell führt das Skript nicht fort, d. h. startet keine weiteren Prozesse.

    Datenbanken speichern laufende Transaktionen ab (eventuell einen Zwischenstand, der später wieder aufgenommen werden kann). Datenbanken sind sehr gut auf Shutdowns getestet, da sie durchgehend laufen und ein Shutdown der normale Fall zur Beendigung ist.

    Wenn du irgendein exotisches oder selbstgeschriebenes Programm (nicht Skript!) hast, was SIGTERM nicht korrekt handhabt, kann aber was schief laufen.

    Beim Systemstart werden üblicherweise Skripte (Shell, bei Qnap auch viel Python) ausgeführt. Da diese sauber abgebrochen werden, kann durch einen Reboot nichts schief gehen.

    => Du hast nichts zu befürchten.

  • Danke, sehr ausführliche Beschreibung! :)

    Dann würde ich die Warteschleife oben gar nicht brauchen. Ich habe auch /var/.boot_fin gefunden (Boot finish). Der Timestamp (Uhrzeit) stimmt mit der Uhrzeit überein, bei dem mein Script beginnt. Heißt also Bootvorgang ist beendet bei Script-Start.

  • Ich grabe diesen Thread noch mal aus: Weiß jemand, was der Unterschied zwischen den Befehlen /sbin/reboot (oder poweroff) und den ähnlich lautenden Befehlen /sbin/qreboot (oder qpoweroff) ist? Alternativ: Gibt es für die QNAP spezifischen Befehle im Ordner /sbin eine Dokumentation?