7 min. read

QNAP NAS per Script starten und herunterfahren

Die Idee: Mein QNAP NAS sollte nur in Betrieb sein, wenn mein Rechner läuft. Bisher lief es 24 Stunden am Tag; Im Grunde die reinste Stromverschwendung, da ich das Gerät fast ausschließlich zu Hause nutze, wenn mein Rechner eingeschaltet ist.

Die QNAP Geräte haben zwar einen Energiezeitplan, der ist jedoch sehr unflexibel und für diese Aufgabe leider nicht geeignet.

Der Weg

Es musste also eine Lösung her, die das Gerät automatisch startet, wenn mein PC startet, und wieder herunter fährt, wenn der Rechner ausgeschaltet wird.

Ersteres ist nicht so schwierig, da fällt bestimmt jedem spontan Wake-On-LAN ein.

Letzteres geht nur über die SSH Konsole des QNAPs, ist aber auch lösbar.

Für die automatische Steuerung der Ereignisse sorgt die Windows Gruppenrichtlinie bzw. unter Linux die Crontab und Sysdemd.

Vorbereitungen

Zunächst muss auf dem QNAP der SSH Zugang aktiviert werden, denn der Befehl zum Herunterfahren kann nur per Secure-Shell geschickt werden:

Die Einstellung findet man in der QNAP Systemsteuerung unter Netzwerk - Telnet/SSH. Wichtig: Nur ein Administratorbenutzer ist berechtigt, sich per SSH zu verbinden. SFTP muss nicht aktiviert werden.

Des Weiteren muss in den QNAP Energieeinstellungen das Starten via Wake-On-LAN aktiviert werden:

Die Einstellung versteckt sich in der QNAP Systemsteuerung unter System - Leistung - Wake-on-LAN (WOL).

Damit wäre nun das QNAP für unsere Aufgabe vorbereitet.

Der Werkzeugkasten

Windows

Zum Versenden eines WOL Netzwerkpakets benötigen wir ein Tool, das per Script (Kommandozeile) funktioniert. Ich habe mich für Wake on Lan Command Line von der Firma Depicus entschieden, es mag auch andere geben, die geeignet wären. Alternativer Download hier.

Für das Absenden des Shutdown Befehls bietet sich plink.exe aus dem Putty Paket an (Download).

Für welchen Putty-Download man sich entscheidet ist letztendlich egal, im Zweifelsfall genügt der Download von plink.exe als 32- oder 64 Bit Version.

An dieser Stelle sollte man mit Putty schon mal testweise eine Verbindung zum QNAP herstellen, um sicher zu stellen, dass der SSH-Key gespeichert wird und dass das Login einwandfrei funktioniert.

Linux

Unter Linux ist es (mal wieder) etwas einfacher, jede Distribution bringt alles mit, was wir brauchen. Zum Versenden von WOL zum Beispiel Etherwake. Um ein SSH-Login mit Passwortübergabe zu ermöglichen, brauchen wir zusätzlich sshpass. Beides installiert der Befehl

sudo apt-get install etherwake sshpass.

Der ssh Befehl als Gegenstück zum Windows plink.exe ist bereits vorhanden.

Bastelanleitung

Windows: gepedit

  • Das Archiv wolcmd.zip in einem beliebigen Ordner extrahieren (und den Pfad merken). Für Putty (bzw. plink.exe) gilt dasselbe.
  • MAC Adresse des QNAPs notieren: QNAP Systemsteuerung - Netzwerk:
  • Gruppenrichtilinien Editor starten: Win-r, gpedit.msc
    • Navigation zu “Richtlinien für Lokaler Computer” - “Windows-Einstellungen” - “Skripts (Start/Herunterfahren)”
    • Für “Sarten” einen Eintrag hinzufügen:
      • Skriptname: Durchsuchen und WolCmd.exe auswählen
      • Skriptparameter: <MAC Adresse des QNAP> <IP Adresse des QNAP> 255.255.255.0 (Beispiel: 00089bc97e50 192.168.177.25 255.255.255.0)
    • Für “Herunterfahren” einen Eintrag hinzufügen:
      • Skriptname: Durchsuchen und plink.exe auswählen
      • Skriptparameter: <IP Adresse des QNAP> -l admin -pw <QNAP Admin-Kennwort> -v poweroff (Beispiel: 192.168.177.25 -l admin -pw youdontknowme -v poweroff)
Gruppenrichtlinien Screenshots

Bei Problemen mit Wake-on-LAN hilft auch das kostenlose Tool WakeMeOnLan von Nirsoft. Ist auch ganz nützlich, wenn man mal schnell “von Hand” das NAS starten oder mehrere Geräte verwalten möchte.

Linux: crontab und systemd

Unter Linux gestaltet sich das Vorhaben etwas einfacher:

  • Wo ist etherwake gespeichert:
    whereis etherwake

    1
    2
    ubuntu@wakemachine:~$ whereis etherwake
    etherwake: /usr/sbin/etherwake /usr/share/man/man8/etherwake.8.gz

    Den Pfad merken wir uns (im Beispiel /usr/sbin/etherwake)

  • Wo ist sshpass gespeichert?
    whereis sshpass
    1
    2
    ubuntu@wakemachine:~$ whereis sshpass
    sshpass: /usr/bin/sshpass /usr/share/man/man1/sshpass.1.gz

Nochmal merken (/usr/bin/sshpass)

  • Cron Tabelle bearbeiten:
    sudo crontab -e (Etherwake muss mit root-Rechten gestartet werden)
    • Eintrag zum Starten des QNAP beim Starten des Rechners hinzufügen: @reboot <Pfad zu etherwake> <MAC Adresse des QNAP>, Beispiel: @reboot /usr/sbin/etherwake 00:08:9b:c9:7e:50
    • Editor (Nano): Datei speichern und beenden: F2, y
  • Shutdown-Script erstellen

    • nano ~/shutdown-qnap.sh
      1
      2
      3
      #!/bin/sh
      # QNAP Herunterfahren
      <Pfad zu sshpass> -p '<QNAP Admin-Kennwort>' ssh admin@<IP Adresse des QNAP> poweroff

    Kennwort, IP-Adresse und Pfad müssen natürlich entsprechend angepasst werden.

  • Datei ausführbar machen:
    chmod +x ~/shutdown-qnap.sh
  • Script per Systemd beim Herunterfahren ausführen:
    sudo ln -s ~/shutdown-qnap.sh /usr/lib/systemd/system-shutdown/

Anmerkung zu Etherwake

Wenn die Netzwerkschnittstelle nicht wie üblich mit eth0 bezeichnet ist, erwartet Etherwake eine entsprechende Angabe. mit cat /etc/network/interfaces kannst man sich die Netzwerkeinstellung ausgeben lassen.

Falls die Schnittstelle beispielsweise wie bei meiner Testmaschine eno1 heißt, lautet der Befehl zum Starten in der Crontab @reboot /usr/sbin/etherwake -i eno1 <MAC Adresse des QNAP>.

Etherwake ist darüber hinaus nicht sehr fehlertolerant bei der Angabe der Mac Adresse. Es muss jedes Byte (wie im Beispiel) per Doppelpunkt vom nächsten getrennt werden.

Zur Sicherheit

Bei beiden Methoden (unter Windows als auch unter Linux) wird das Admin-Kennwort des QNAPs im Klartext irgendwo gespeichert. Das sollte klar sein, lässt sich aber nicht vermeiden.

Auch eine Anmeldung per Public Key würde nicht helfen, da ja der Private Key auch irgendwie gelesen werden muss. Man möge selbst entscheiden, ob man dieses Risiko eingeht.

Nebenwirkungen

Automatisieren und Scripten ist ja immer eine tolle Sache, wenn´s einem das Leben einfacher macht. Auf der anderen Seite sind da auch einige Unschönheiten:

  • Das QNAP wird ohne Rückfrage herunter gefahren, wenn der steuernde PC herunter gefahren wird. Auch, wenn man nur mal neu booten möchte. Das kann zum Beispiel bei einem Neustart des Rechners dazu führen, dass das QNAP herunter gefahren wird und anschließend das “Aufwach-Paket” ignoriert, weil es zu dem Zeitpunkt, zu dem der PC schon wieder hochgefahren ist, noch nicht vollständig heruntergefahren war.
  • Mein QNAP braucht beinahe fünf Minuten zum Starten. Die QNAP Dienste (wie Netzlaufwerke) brauchen also ihre Zeit, bis sie zur Verfügung stehen.

Falls jemand Ideen zur Umgehung dieser Probleme hat, gerne in die Kommentare.

Aussicht

Dieser Ansatz lässt sich recht einfach auch für Home Automation Lösungen wie Node-RED oder Home Assistant adaptieren. So könnte bei Anwesenheit im Wohnbereich das NAS starten und bei Abwesenheit herunter fahren. Oder bei geöffneter Kühschranktür oder…

Erfahrungen und Anregungen dazu bitte auch in die Kommentare.