NAS mit Python script stoppen

  • Hallo liebe Community,

    konnte mit dieser Anleitung: wiki - ubuntuusers - Wake on LAN
    ... mein QNAP NAS erfolgreich via "wakeonlan" starten.

    Code
    <Mein-Systemverwalter>@<Mein-Rechner>:~$ sudo wakeonlan <QNAP NAS MAC Adresse>
    [sudo] Passwort für <Mein-Systemverwalter>:
    Sending magic packet to <Adresse> with <QNAP NAS MAC Adresse>
    <Mein-Systemverwalter>@<Mein-Rechner>:~$


    Leider sind noch 2 Fragen/Probleme offen:
    1. Wie schaff ich es den "wakeonlan" Befehl als Standard User ohne Passwortabfrage auszuführen?
    2. Im WoL Wiki wird ausführlich beschrieben wie man ein Gerät im Netzwerk startet ABER wo ist der Weg das Gerät wieder zu stoppen? Auch im Netz finde ich bisher keine Hinweise.

    Meine Software:
    OS: Ubuntu 16.04.3 LTS
    Kodi: v17.6

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • hallo @JakeB normalerweise ist der wakeonlan befehl kein Befehl der sudo braucht.
    2. Die Einstellung wann ein Gerät wieder einschlafen soll z.B. bei 20 Minuten ohne Tätigkeit wird im NAS eingestellt (vermutlich bei Energie sparen)

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

  • Hi @SkyBird1980: Das ging aber fix. 8o

    Punkt 1.:
    Korrekt ... gerade getestet, läuft als Standard User auch ohne Passwortabfrage. Das sudo in den Anleitungen löst immer eine gewisse Einschüchterung bei mir aus :/

    Punkt 2.:
    Wechsel im Moment von Windows zu Ubuntu. Unter Windows konnte man mit einem Befehl/Programm das NAS auch stoppen.
    Aber wenn es auf der Linux Seite dafür keinen extra Befehl gibt, kann ich auch deinen Vorschlag verwenden.

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Irgendwie ließ mir das keine Ruhe und ich hab weiter gesucht.
    Mit dem folgenden Befehlen lässt sich die QNAP NAS wieder herunterfahren:

    Code
    <Mein-Standard-User>@<Mein-Rechner>:~$ ssh admin@<NAS-IP-address>
    admin@<NAS-IP-address>'s password: <hier muss ich leider das admin Passwort manuell eintragen>
    
    
    Danach erscheint die ssh Verbindung und man muss nur noch "halt" eingeben:
    [~] # halt 
    [~] # Connection to <NAS-IP-address> closed by remote host. <diese Zeile erscheint nach ca. 1 Min.>
    Connection to <NAS-IP-address> closed.
    <Mein-Standard-User>@<Mein-Rechner>:~$


    Da der Spass am Ende mit einem Python script ausgeführt werden soll, ist die Passwortabfrage natürlich ein No Go.
    Mit den folgenden Versuchen bin ich bisher gescheitert:

    Code
    <Mein-Standard-User>@<Mein-Rechner>:~$ ssh admin@<NAS-IP-address> -P 22 -pw <admin-Passwort> halt
    admin@<NAS-IP-address>'s password: <er will wieder das Passwort wissen :-( >
    <Mein-Standard-User>@<Mein-Rechner>:~$
    Code
    <Mein-Standard-User>@<Mein-Rechner>:~$ ssh <NAS-IP-address> -P 22 -ssh -l admin -pw <admin-Passwort> halt
    Connection to <NAS-IP-address> closed by remote host. <Zeile erscheint sofort aber NAS wird NICHT heruntergefahren :-( >
    <Mein-Standard-User>@<Mein-Rechner>:~$


    Kennt vielleicht jemand die Lösung? Das muss doch auch in einem Schritt gehen.

    Die Verwendung des Admin-Passworts in einem Script ist zwar unschön aber es ist in einem geschlossenen Netzwerk (keine Internetverbindung).
    Unter Kodi sind auch nur die default Addons ('Artwork Downloader' und 'Global Search') installiert.
    Wenn ich wieder/mehr Zeit hab, muss ich mal den Zugang via RSA-Key-Login umsetzen.

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Ich kene QNAP nicht, aber es sieht so aus als ob dies unter einem Linux läuft, oder?
    Wenn ja, gibt es da einen cron?
    Wenn dem auch so ist, warum nicht einen Job einrichten der prüft ob eine bestimmt Datei vorhanden ist und im
    Falle das dem so ist, dann die Datei löscht und runterfährt?
    Vielleicht hat das NAS auch die Möglichkeit eines Filemonitorings, dann könte man dies darüber auch lösen.
    Das würde Dir die ganze Arbeit bezüglich remote shell, server etc... abnehmen.

    Cheers
    Claudia

  • Hallo Claudia,

    Danke für die Tipps!

    QNAP nutzt auch Linux so wie z.B. Synology. Cron wird bei QNAP wohl als "crontab" bezeichnet.
    Aber wenn ich das richtig verstehe, laufen deine Lösungen auf das selbe hinaus wie der Vorschlag von 'SkyBird1980':
    Punkt 2 in Beitrag #2.

    Tja wie schon geschrieben unter Windows ging es einfacher, die Hürden in Linux sind bekanntlich (und aus guten Grund) höher.

    Werde mal das: Ssh mit Zertifikaten absichern
    ... ausprobieren.
    Ist zwar eine Synology Seite, aber die kochen ja alle nur mit Wasser ... ehhh Linux. :rolleyes:

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • QNAP nutzt auch Linux so wie z.B. Synology. Cron wird bei QNAP wohl als "crontab" bezeichnet.
    Aber wenn ich das richtig verstehe, laufen deine Lösungen auf das selbe hinaus wie der Vorschlag von 'SkyBird1980':
    Punkt 2 in Beitrag #2.


    Kann ich nicht sagen, da ich nicht weiß wie das NAS die Untätigkeit ermittelt, kann per Cron, per Event, per Timer ... sein.
    Mein Ansatz ist folgender:

    Ein cronjob läuft z.B. alle Minute um die Existenz einer Datei zu prüfen. Ist die Datei vorhanden, dann wird der Befehl zum shutdown ausgeführt,
    ist die Datei nicht vorhanden wird der cronjob beendet.

    Die Datei würdest Du dann einfach erstellen wenn Du möchtest, dass das NAS herunterfahren soll. Da dein Kodi ja bereits über eine Verbindung zum NAS verfügt, musst Du nur sicherstellen, dass es einen Platz gibt wo Du von Kodi aus auf das NAS schreiben darfst. Wenn dieser Platz dann zufällig
    auch noch das tmp Verzeichnis des NAS ist, kannst Du Dir auch das Löschen der Datei schenken, da Dateien im tmp Verzeichnis automatsch gelöscht
    werden.

    Cheers
    Claudia

  • "...Da dein Kodi ja bereits über eine Verbindung zum NAS verfügt,..."

    Das ist aber das Problem. Im Terminal muss ich immer das Admin Passwort eingeben.
    Alles soll in einer Befehlszeile stehen, so dass ich in Kodi via Python script den NAS-shutdown starten kann.

    Die ssh Verbindung funktioniert so weit ich weiß nur über einen Admin-zugang.
    Wenn die Verbindung steht, reicht ein simples "halt" und der Keks ist gegessen.

    Vielleicht kann ich auf dem NAS einen extra Admin anlegen, der nur das Recht zum 'shutdown' hat.

    Das wird noch ein langer Weg. :rolleyes:

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Nein, das hast Du falsch verstanden.

    Auf dem NAS legst Du ein Skript an

    vim /tmp/shutdown_nas.sh

    Inhalt

    Bash
    #!/bin/bash
    file="/tmp/test_datei"
    if [ -f "$file" ]
    then
        rm $file
    fi


    speichern und dem Skript Ausführungsrechte geben

    chmod u+x shutdown_nas.sh

    danach legst Du mit dem Program crontab einen cronjob an, welcher über den cron daemon ausgeführt wird.

    crontab -e


    Bash
    */1 * * * * /tmp/shutdown_nas.sh > /dev/null 2>&1

    speichern - exit.
    mit crontab -l kannst Du prüfen ob der Job erstellt wurde.


    Nun würde minütlich geprüft ob eine Datei namens test_datei im Verzeichnis /tmp existiert und wenn ja, die gelöscht.

    Im Beispiel habe ich sowohl das Skript als auch die Datei die zu prüfen es gilt im Verzeichnis tmp. In einer produktiven
    Umgebung würdest Du wenigstens das Skript in einem anderen Verzeichnis speichern, da beim Neustart das tmp immer wieder
    neu estellt wird, sprich alles was vorher dort war ist nach dem Neustart gelöscht.

    Nun erstelle von Kodi aus , zum Beispiel durch copy, eine Datei namens test_datei im Verzeichnis /tmp und Du wirst sehen,
    dass diese nach spätestens einer Minute nicht mehr existiert. Wenn das funktioniert, brauchst Du nur noch das Skript dahin erweiteren,
    das nach dem löschen der Datein das System heruntergefahren wird - fertig, dein NAS wird dann gestoppt wenn Du die Datei erstellst.

    Solltest Du von Kodi aus keine Schreibrechte auf /tmp auf deinem NAS haben, dann nimm ein Verzeichnis auf welchem Du die Rechte
    besitzt und passe das Skript dementsprechend an.

    Der User der das Skript ausführt muss natürlich auch das Recht haben das System zu stoppen.

    Cheers
    Claudia

  • Vielen Dank Claudia für die ausführliche Anleitung!

    War die ganze Zeit nur auf die SSH Verbindung fixiert.

    Dein workaround ist eine interessante Alternative zu SSH.

    Werde dann hier weiter berichten.

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!