Beiträge von freestylz

    #2 beim Logout/Logoff des Users

    Wenn der Akku im Betrieb einen definierten niedrigen Ladezustand erreicht, wird der Nutzer ausgeloggt, dabei das Profil entladen (aus dem Speicher geschmissen) und dabei das Script ausgeführt.

    Habe es der Ordnung halber getestet. Das Skript wird nicht ausgeführt.

    Ob meine Interpretation so stimmt, kann ich nicht testen, weil mein Desktop dauerhaft ohne USV an der Steckdose hängt und ich auch kein NAS betreibe.

    Könntest du theoretisch schon. Das Energieprofil "Am Netzkabel" hat neben dem Monitor ausschalten nach x-Minuten auch die Option für Skript ausführen. Hier ein Test-Skript laufen lassen, welches eine Fenstermeldung auf den Desktop zaubert.

    Code
    #kdialog zeigt eine Textbox mit Start des Skripts an
    kdialog --msgbox "Hallo Welt - ich teste ein Skript"

    Unter folgendem Link kann man wohl davon ausgehen, dass dieser Bug - Energy Saving Run Script is ignored - auch hier zutrifft: https://bugzilla.opensuse.org/show_bug.cgi?id=1173763

    Code /sbin/shutdown -hP now

    Die zusätzliche Option -P (Power-off the machine) lässt das NAS per Skript genauso herunterfahren, wie ohne diese Option. Das Skript selbst ist aktuell auch nicht mehr das Problem, sondern wie bekommt man es automatisch über die Einstellungen der Energiesparoptionen von openSUSE gestartet? Das funktioniert bei mir nicht.

    openSUSE bietet drei Optionen das Skript auszuführen:

    1.) Beim Laden des Profils

    2.) Beim Entladen des Profils

    3.) Nach xx Minuten


    Optionen 1.) und 3.) habe ich jeweils in den Modi „Am Netzkabel“, „Im Akkubetrieb“ und „Im Akkubetrieb bei niedrigem Ladestand“ getestet. Das Skript kommt bei keinen der Profile zur Ausführung. Option 2.) ergibt mir keinen Sinn, deshalb auch nicht getestet.

    Klingt prima.
    Ich habe das Skript etwas modifiziert. Anstatt dem 'echo' Befehl nutze ich jetzt 'kdialog'. Nun ploppt mit Start des Skripts auf dem Desktop ein Infofenster auf, anstatt des Textes in der Konsole. Jetzt ist es eindeutig nachvollziehbar, dass dieses Skript trotz der Einstellung nicht gestartet wird. Zum Test habe ich bei Energiesparen nach 2 Minuten Skript starten und nach 5 Minuten Monitor ausschalten eingestellt. Das Infofenster erscheint nach den 2 Minuten nicht, aber nach 5 Minuten schaltet sich der Monitor aus.


    Code
    # Dieses Skript fährt das Synology NAS herunter. Die Einstellung in Systemeinstellungen > Energiesparmodus startet das Skript.
    
    #kdialog zeigt eine Textbox mit Start des Skripts an
    kdialog --msgbox "UPS Batterie Low. Das Synology NAS wird heruntergefahren!"
    
    #sshpass dient zum Login beim NAS und dem Absetzen des shutdown Befehls
    sshpass -p "meinPasswort" ssh root@192.168.10.13 -t "/sbin/shutdown -h now"

    Das Skript zum Remote Shutdown des NAS funktioniert dank deiner Hilfe aus der Konsole heraus. Das war aber nur ein Teil des Problems.

    Das Skript allein nutzt mir nichts, wenn es nicht automatisch durch ein Systemereignis ausgelöst wird, in meinem Fall bei kritischem Ladezustand der UPS. Wie schon oben erwähnt, hätte ich erwartet wenn openSUSE in seiner GUI eine Option anbietet ein Skript auszuführen, dass dies dann auch geschieht. Müsste ich jetzt also ein neues Thema im Forum eröffnen „Hilfe mein Skript wird nicht ausgeführt“ um mein Problem zu lösen? Und kann ich da überhaupt Hilfe erwarten wenn sich hier bisher außer dir noch niemand mit eingebracht hat?


    Trotzdem danke ich dir an dieser Stelle nochmals recht herzlich, wie geduldig du mir auf die Sprünge geholfen hast. Es ist nicht immer leicht sich mit Anfängern rumzuplagen. Größten Respekt dafür.

    Das Script wird auf dem openSUSE Rechner ausgeführt........

    Ja, na klar. Genau wie die Systemeinstellungen zum Energiesparmodus.
    Den Speicherort des Skripts habe ich entsprechend deinen Angaben geändert, jeweils für user und root. Das Skript habe ich als user und auch als root unter dem jeweiligen Account neu erstellt, so dass nun der jeweilige Benutzer die Rechte an der Datei hat. Die neuen Skripts habe ich mit shutdown-nas.sh benannt, unter Eigenschaft/Berechtigung sind sie als ausführbar gekennzeichnet. Ich habe noch eine Zeile mit einem Befehl [echo "Das Synology NAS wird heruntergefahren!"] ergänzt, damit ich bei manueller Ausführung über die Konsole wenigstens ein bisschen Feedback bekomme.
    Die Ausführung des Skripts funktioniert über die Konsole.


    Test als user:

    Code
    otto@mws200:~> ~/bin/shutdown-nas.sh
    Das Synology NAS wird heruntergefahren!
    Connection to 192.168.10.13 closed.
    otto@mws200:~> 

    Test als root:

    Code
    mws200:~ # /usr/bin/shutdown-nas.sh
    Das Synology NAS wird heruntergefahren!
    Connection to 192.168.10.13 closed.
    otto@mws200:~> 


    Die Ausführung des Skripts über openSUSE für den user Otto "Systemeinstellungen>Energiesparmodus>Energiesparen>Skript ausführen>Link: /home/otto/bin/shutdown-nas.sh > Skript ausführen nach 1 Minute" funktioniert nicht. Das NAS fährt nicht herunter. Es liegt die Vermutung nahe, dass openSUSE das Skript nicht einstellungsgemäß startet.

    Für user Otto hatte ich auch zusätzlich den Link zum Skript ~/bin/shutdown-nas.sh getestet.


    Ich hoffe hier braucht es nicht einen cron-Job. Skript ausführen unter den Energiespareinstellungen von openSUSE schien der vermeintlich einfachste Weg. In welcher Datei ändert sich denn etwas, wenn man die Optionen über die GUI ändert? Ggf. kann man hier selbst was nachbessern?
    Das Herunterfahren über UPS bei 30% Ladezustand habe ich mir bis jetzt erspart, da es zum Testen einfach viel zu lange dauert, bis die Batterie leer ist. Außerdem sollte auch hier in openSUSE nur das Skript per angeklickter Option zum Ereigniszeitpunkt zur Ausführung kommen.

    Beste Grüße und danke schon mal bis hier hin.

    Edit: parallel zu deinem Post hatte ich es schon selbst erkannt wo mein Fehler lag und meinen hier folgenden Text verfasst.


    Die Eingabe obigen Codes hat nun doch das NAS herunterfahren lassen.
    Als eingeloggter User musste auch für diesen User erst noch ein key fingerprint per "ssh root@192.168.10.13" erzeugt werden. Danach funktionierte es mit "sshpass ...." aus der Konsole heraus.


    Nachdem wohl jetzt die Zeile in der shutdown.sh und der key fingerprint passen, habe ich in der Energieverwaltung zum Testen im Profil Energiesparen das Feld "Skript ausführen" angewählt, in der Zeile Skript den Pfad /usr/sbin/shutdown.sh zum Speicherort des Skripts angegeben und Skript ausführen nach 1 Min. eingestellt und dann Anwenden angeklickt. Leider passiert aber nach einer Minute nichts. Ich wollte es erst einmal ohne UPS kritischen Ladeszustand testen, da ich hierzu hätte wesentlich länger warten müssen. Das sollte aber nicht von Bedeutung sein welches eingestellte Ereignis das Skript auslöst.

    Ok, nun geht es schon mal in die richtige Richtung. Was ich anfangs in der ersten PuTTY Session hatte, der SSH Key musste einmalig zwischen remote Host und Client verifiziert werden, war hier wohl auch nötig, wenn man per SSH ohne PuTTY erstmalig zum Client eine Verbindung aufbaut. Der key fingerprint ist nun im NAS hinterlegt. Das habe ich auch schon getestet, die Abfrage kommt nicht mehr, es erscheint direkt root@ip's password. Nach dem nun erfolgreichen Connect zum Client habe zunächst das Skript getestet, der Shutdown des NAS erfolgte leider nicht.

    Deshalb habe ich dann den shutdown Befehl im Terminal eingegeben, worauf das NAS herunterfuhr und der Connect vom remote host geschlossen wurde.


    Korrekt, ich habe openSUSE Leap 15.1, Die Code Zeile scheint also gar nicht mal so falsch. Dann wird wohl das NAS die Ausführung verhindern. Aber grundsätzlich verstehe ich es hoffentlich richtig, wären Passwort und/oder IP des NAS falsch eingegeben bzw. würden vom NAS nicht akzeptiert werden, müsste es dann zu einer sichtbaren Fehlermeldung kommen?

    Du hast dein Passwort zwischen diesen ' .... ' Zeichen eingegeben. Ich habe diese " .... " Zeichen verwendet. Ist das relevant. Ich hatte das Passwort in der Zeile auch schon komplett ohne Zeichen stehen. Bin gerade verwirrt wie es richtig wäre.

    Erster Code hat leider nicht zum gewünschten Erfolg geführt. Meine shutdown.sh habe ich wie von dir angegeben modifiziert und in das Verzeichnis /usr/sbin kopiert. Du schreibst, bei dir hätte es funktioniert. Sehe ich das richtig, dass du mit dem Code von deinem PC das Skript gestartet hast um deinen Laptop neu zu starten? Du hast zum Test also kein NAS angesprochen?
    Ist denn der Teil "sshpass -p meinpasswort ssh root@ip-meines-NAS -t.........." für meinen Anwendungsfall überhaupt korrekt um auf dem NAS den shutdown-Befehl ausführen zu können?


    Meine Tests:

    1.) Linksklick auf das Skript und im Dropdown Menü "Ausführen" bewirkt nichts am NAS, auch keine Fehlermeldung.
    2.) Start des Skripts über das Ereignis des Energiesparmodus bewirkt nichts, auch keine Fehlermeldung.

    3.) Rechtsklick auf das Skript > Aktionen > in Konsole Ausführen endet mit den Fehlermeldungen "Achtung: Das Programm „/usr/sbin/shutdown.sh“ mit den Argumenten „/usr/sbin/shutdown.sh“ kann nicht gestartet werden und "Achtung: execve: Fehler im Format der Programmdatei".


    Ein Connect zwischen PC und NAS per ssh-keygen in Verbindung mit ssh-copy-id wäre wohl eine weitere und durchaus sicherere Möglichkeit für eine Verbindung, aber ich müsste mich in der Tat erst einmal damit befassen. Aber mich in ein weiteres Thema einzuarbeiten, wollte ich eigentlich vermeiden und war auch der Grund hier im Forum Hilfe zu suchen.

    Bereits mit dem NUT-Server und PuTTY für NAS shutdown habe ich mich einige Zeit befasst, was nicht zum Erfolg führte, da die auffindbaren Anleitungen meist veraltet sind. Ich hätte hier auf eine Copy-Paste-Lösung für mein Problem gehofft. Nicht dass ich zu faul wäre mich irgendwo einzuarbeiten, aber manchmal sollte man auch mal den vermeintlich einfachen Weg versuchen.