[gelöst] Raumfeld weckt NAS (fast) per WOL?

+A -A
Autor
Beitrag
davie2000
Stammgast
#1 erstellt: 08. Okt 2016, 14:20
Hallo!

Mein Problem: Musik liegt auf dem (meist ausgeschaltenen) NAS - Raumfeldbox soll beim Einschalten das NAS aufwecken.

Wenn ich auf der Konsole meiner Raumfeld One M per SSH den folgenden Befehl absetze, wacht mein NAS brav auf:
ether-wake -b -i eth0 4C:9E:FF:40:XX:YY; zugegeben, muss ich den Befehl drei mal absetzen, damit das NAS zuverlässig aufwacht.

Jetzt wollte ich das in den Startvorgang der Raumfeld One M einbauen und habe dazu im Verzeichnis /etc/init.d/ eine neue Datei namens
S46wol-davie2000 angelegt, mit folgendem Inhalt:
#!/bin/sh
#
# Waking Zyxel NAS....
#

case "$1" in
  start)

        echo "Waking Zyxel NAS attempt 1 ..."
        ether-wake -b -i eth0 4C:9E:FF:40:XX:YY
        echo "Waking Zyxel NAS attempt 2 ..."
        ether-wake -b -i eth0 4C:9E:FF:40:XX:YY
        echo "Waking Zyxel NAS attempt 3 ..."
        ether-wake -b -i eth0 4C:9E:FF:40:XX:YY
        ;;
  stop)
        ;;
  restart|reload)
        "$0" start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?

(Natürlich mit der richtigen MAC-Adresse des NAS, nicht mit XX und YY)

Zu diesem Zeitpunkt sollte das Netzwerk schon verfügbar sein (S40network) und
Raumfeld (S99master-process) noch nicht gestartet sein.

Da das NAS nach dem (Aus- und) Einschalten der Raumfeld One M eben NICHT aufwacht, würde ich gerne
im (sys)log nachschauen, ob meine echo-Ausgaben dort überhaupt vorkommen.
Aber ich kann kein log finden :-(

Hat jemand einen Tipp für mich, wo und wie ich den "ether-wake"-Befehl korrekt einbauen kann bzw.
wie ich den syslog angezeigt bekomme?

thx4info u greetz
davie2000

PS: Dass die neue Datei ("/etc/init.d/S46wol...") ein Raumfeld-Update nicht übersteht, ist amtlich, oder?


[Beitrag von davie2000 am 08. Okt 2016, 14:23 bearbeitet]
ChriD
Stammgast
#2 erstellt: 09. Okt 2016, 09:07
Du kannst das NAS auch ganz zum schluss aufwecken, das muss nicht vor dem Metaserver start geschehen. Das funktioniert dann auch so ganz gut
Probier mal das script als letztes aufzurufen. und vorher noch mal ein sleep reinwerfen.
Die RF Devices haben nach dem "Network" script noch lange keine IP. Das sehe ich beim Raumserver. Bei dem musste ich beim start auch ein sleep einbauen da die network interfaces noch nicht up waren....

Sieht dann in etwa so aus für die RF-Devices:
(das enpo0s3 interface ist nur wegen meiner linux vm ;-) )

https://github.com/C...Daemon/S99raumserver

# wait until network gets available
# there might be better ways to check this
echo "Waiting for network to become available"
while true
do
printf "."

ONLINE=`ifconfig | grep 'Link\|inet' | grep eth0`
if [[ ! -z "$ONLINE" ]]; then printf "\neth0 online\n"; break; fi

ONLINE=`ifconfig | grep 'Link\|inet' | grep wlan0`
if [[ ! -z "$ONLINE" ]]; then printf "\nwlan0 online\n"; break; fi

ONLINE=`ifconfig | grep 'Link\|inet' | grep enp0s3`
if [[ ! -z "$ONLINE" ]]; then printf "\nenp0s3 online\n"; break; fi

sleep 1
done

# wait a little bit
echo "Please be patient. Daemon will start in 3 seconds!"
sleep 3


Ja, überleben tut das Script ein Update leider nicht.


[Beitrag von ChriD am 09. Okt 2016, 09:08 bearbeitet]
davie2000
Stammgast
#3 erstellt: 09. Okt 2016, 12:33
Hi!

Danke für deine rasche Antwort!

Bevor ich dazu komme, das auszuprobieren, noch einige Fragen bzw. Feststellungen:

Weil ich wissen wollte, ob ich überhaupt an der richtigen Stelle bin (/etc/init.d), habe ich in
die vorhandene Datei S99master-process nach dem Start ein echo "hello" > /usr/shar/hello.txt
eingebaut. Ich habe die Datei (hello.txt) sogar vorher angelegt und für alle schreibbar gemacht (chmod 666),
aber die Datei bleibt leer.

Das heißt für mich entweder, dass etc/init.d nicht das Verzeichnis ist, dessen Skripte beim Booten abgearbeitet werden
oder ich noch einen wichtigen Schritt ("dem Booten die neuen Skriptinhalte bekanntmachen") vergessen habe.
Ich habe auch versucht, ins tmp-Verzeichnis zu schreiben - bringt aber auch nichts.

Habe ich viell. ein Rechte-Problem, weil ich über SSH "root" bin, aber nicht beim Booten in den Skripts?

Vielen Dank schon jetzt für eure Antworten!

greetz
davie2000

Update:
Ich habe dein Skript mal nachgebaut - klappt aber auch nicht: kein WOL, kein "hello" in der Datei
#!/bin/sh
#
# Waking Zyxel NAS....
#

case "$1" in
  start)
#        echo "hello" > /usr/share/hello.txt
#        echo "Waking Zyxel NAS attempt 1 ..."
#        ...
#        ;;
        echo "Waiting for network to become available"
        while true
        do
          printf "."
          ONLINE=`ifconfig | grep 'Link\|inet' | grep eth0`
          if [[ ! -z "$ONLINE" ]]; then ether-wake -b -i eth0 4C:9E:FF:40:XX:YY; break; fi
          echo "hello" > /usr/share/hello.txt
          sleep 1
        done
        sleep 20
        ;;
  stop)
        ;;
  restart|reload)
        "$0" start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?


Habe auch nicht den Eindruck, dass nach dem Einschalten 20 Sekunden (sleep 20) vergehen.
=> Ich glaube also, dass das Skript gar nie zieht/läuft!
Die One M ist ca. 10 Sekunden nach dem Einschalten "betriebsbereit" = beide LEDs leuchten dauerhaft.


[Beitrag von davie2000 am 09. Okt 2016, 14:05 bearbeitet]
tomtiger
Administrator
#4 erstellt: 09. Okt 2016, 14:07
Hi,


davie2000 (Beitrag #3) schrieb:
echo "hello" > /usr/shar/hello.txt


Fehler beim Abtippen oder in Script? das Verzeichnis heißt "/usr/share"

Die Dateien im Verzeichnis init.d werden nur bei SysV init abgearbeitet, bei Systemd "/etc/systemd/system/" und bei Upstart: .conf-Dateien in "/etc/init/".

LG Tom
davie2000
Stammgast
#5 erstellt: 09. Okt 2016, 16:17

Fehler beim Abtippen oder in Script? das Verzeichnis heißt "/usr/share"

Danke für den Hinweis, aber war nur ein Tippfehler hier im Forum - im Skript stimmts.

Die Dateien im Verzeichnis init.d werden nur bei SysV init abgearbeitet, bei Systemd "/etc/systemd/system/" und bei Upstart: .conf-Dateien in "/etc/init/".

Es muss also "SysV" sein, weil es in /etc weder das Verzeichnis systemd/ noch init/ gibt, nur init.d/ mit den ganzen Snn*-Dateien (also zB S40network).
Offenbar wird also beim Einschalten der One M NICHT das "SysV init abgearbeitet".

Warum nicht? Was mache ich noch falsch?


[Beitrag von davie2000 am 09. Okt 2016, 19:55 bearbeitet]
davie2000
Stammgast
#6 erstellt: 19. Okt 2016, 18:05
Mittlerweile habe ich ein funktionierendes Skript /etc/init.d/S99wol, das beim "harten Einschalten" (also hinten an der Box den Schalter auf 0, warten, wieder auf 1) bzw. bei reboot via SSH mein NAS erfolgreich aufweckt.

Leider funktioniert das eben nicht, wenn die Box nur vorne aus- und eingeschaltet wird.
Warum auch immer, aber das Skript wird "beim Aufwachen" dann nicht durchlaufen.

Wo muss ich das Skript hinlegen, dass es auch beim Aufwachen abgearbeitet wird?


[Beitrag von davie2000 am 19. Okt 2016, 18:10 bearbeitet]
tomtiger
Administrator
#7 erstellt: 19. Okt 2016, 20:38
davie2000
Stammgast
#8 erstellt: 19. Okt 2016, 21:54
Danke für den Link, aber den kannte ich (leider) schon und die ganzen tools gibts auf meiner Raumfeld One M nicht:

  • /usr/lib/pm-utils/... Verzeichnis existiert nicht
  • /lib/systemd/... Verzeichnis existiert nicht
  • /usr/lib/systemd/...
tomtiger
Administrator
#9 erstellt: 19. Okt 2016, 22:21
Hi,

das systemd nicht genutzt wird hatten wir schon. Kannst Du rausfinden, welche Befehle beim Betätigen des Ausschaltknopfes abgerufen werden?

LG Tom
7suxx
Ist häufiger hier
#10 erstellt: 20. Okt 2016, 10:48
Wenn der Power-Button gedrückt wird, ist das nur ein Resume vom Suspend. Ich hatte die Fragen bezüglich des Einhängens von Scripten schon in diesem Fred
an die Raumfeldjungs gestellt, aber bisher keine Antwort bekommen.

Gruss
7suxx
davie2000
Stammgast
#11 erstellt: 22. Okt 2016, 01:11

tomtiger (Beitrag #9) schrieb:
.... Kannst Du rausfinden, welche Befehle beim Betätigen des Ausschaltknopfes abgerufen werden?

Leider nein.
Aber die letzten Zeilen aus dem logread vor dem Schlafengehen sind:

Oct 19 23:36:47 audio-adapter user.notice raumfeld: master-process StopAppsAction: all apps stopped
Oct 19 23:36:47 audio-adapter user.notice raumfeld: master-process action 'stop apps' finished with result: success
Oct 19 23:36:47 audio-adapter user.notice raumfeld: master-process serial state-machine 'prepare suspend': action 'stop apps' succeeded
Oct 19 23:36:47 audio-adapter user.notice raumfeld: master-process SuspendHandler: preparation for suspend mode finished with result: success
Oct 19 23:36:47 audio-adapter user.notice raumfeld: master-process WatchDog is suspending
Oct 19 23:36:47 audio-adapter user.notice raumfeld: master-process Suspend: entering suspend mode
Oct 19 23:36:47 audio-adapter user.info kernel: [15652.811363] PM: Syncing filesystems ... done.


Um welche Art von "suspend" es sich handelt bzw. welche konkreten Befehle zu den Ausgaben geführt haben kann ich da nicht herauslesen.
tomtiger
Administrator
#12 erstellt: 22. Okt 2016, 02:11
Hi,

gibt es das Verzeichnis "/etc/pm/sleep.d"?

LG Tom
davie2000
Stammgast
#13 erstellt: 23. Okt 2016, 02:11
Ich habe jetzt eine Lösung, die auch noch nach dem Einschalten an der Front (=Aufwachen aus Suspend) funktioniert.
Sofern das Skript einmal beim Kaltstart (oder 'reboot' via SSH) in den Hintergrund gestartet wurde.

Das Skript selbst liegt in /opt/wol-daemon.sh und läuft in einer Endlosschleife im Hintergrund, die ständig prüft, ob das NAS läuft, und es aufweckt, falls nicht.
#!/bin/sh

# This script starts after a cold boot (after it was switched off)
# and should keep running after waking from suspend ...
# It tries to wake my NAS in an endless loop

IP=192.168.xxx.xxx    # IP of myNAS
MAC=4C:9E:XX:XX:XX:XX # MAC-adress of myNAS
PRE_SLEEP=30          # seconds to sleep before starting the endless loop
LONG_SLEEP=120        # seconds to sleep when NAS was up (pingable)
NAS_WAKEUP_TIME=35    # seconds to sleep after sending magic packet(s)



NOW=$(date +"%Y-%m-%d_%H:%M:%S")
echo $NOW "wol-daemon started - pinging/waking myNAS ..."

# wait 30 seconds for 'network' and 'date/time' to become ready          
sleep $PRE_SLEEP 

while true
do
  # TODO: check if network is ready (specially after resume) and else sleep some time

  # check if myNAS is pingable
  ping -c 1 $IP > /dev/null
  if [ $? -eq 0 ]
  then
    # myNAS is online - make a longer break
    NOW=$(date +"%Y-%m-%d_%H:%M:%S")
    echo $NOW "myNAS is awake - daemon sleeps next" $LONG_SLEEP "seconds ..."
    sleep $LONG_SLEEP 
  else
    # myNAS not online - send magic packets to wake it up
    NOW=$(date +"%Y-%m-%d_%H:%M:%S")
    echo $NOW "myNAS not running - daemon tries to wake it up ..."
    ether-wake -b -i eth0 $MAC
    ether-wake -b -i eth0 $MAC
    ether-wake -b -i eth0 $MAC
    # it seems that myNAS needs three wake calls to get up :)
    NOW=$(date +"%Y-%m-%d_%H:%M:%S")
    echo $NOW "... and give it" $NAS_WAKEUP_TIME "seconds to wake up  before checking  again ..."
    sleep $NAS_WAKEUP_TIME
  fi 
done
NOW=$(date +"%Y-%m-%d_%H:%M:%S")
echo $NOW "wol-daemon ended"

Gestartet wird das Skript direkt im Raumfeld-Skript /etc/init.d/S99master-process ganz zu Beginn (deshalb auch die 30 Sek. Wartezeit im Skript):
#!/bin/sh

case "$1" in
  start)
    # start wol-daemon (by davie2000)
    ./opt/wol-daemon.sh > /opt/wol-daemon.log &

    test -x /raumfeld/master-process/master-process || exit 0
...

Die Ausgabe ins Logfile dient der Verifizierbarkeit und wird später noch nach /dev/null umgeleitet, um übermässiges Wachstum zu verhindern.
Achtung: Der Start des Shellskripts muss nach einem Raumfeld-Update wieder manuell reingepinselt werden!

Das das ganze auch nach dem Aufwachen funktioniert, sehe ich daran, dass das NAS (das ich manuell heruntergefahren habe) wieder aufwacht und
außerdem im Log meines Skripts ;-)
root@speaker:/opt $ cat wol-daemon.log
2016-10-23_01:32:09 wol-daemon started - pinging/waking myNAS ...
2016-10-23_01:32:09 myNAS is awake - daemon sleeps next 2 minutes ...
2016-10-23_01:48:53 myNAS not running - daemon tries to wake it up ...
2016-10-23_01:48:53 ... and give it 30 seconds to wake up  before checking  again ...
2016-10-23_01:49:33 myNAS not running - daemon tries to wake it up ...
2016-10-23_01:49:33 ... and give it 30 seconds to wake up  before checking  again ...
2016-10-23_01:50:06 myNAS is awake - daemon sleeps next 2 minutes ...
2016-10-23_01:52:06 myNAS is awake - daemon sleeps next 2 minutes ...
2016-10-23_01:54:35 myNAS not running - daemon tries to wake it up ...
2016-10-23_01:54:35 ... and give it 30 seconds to wake up  before checking  again ...
2016-10-23_01:55:15 myNAS not running - daemon tries to wake it up ...
2016-10-23_01:55:15 ... and give it 30 seconds to wake up  before checking  again ...


Probleme habe ich nur damit, den Hintergrundprozess wieder zu killen:
Durch die sleeps taucht der Prozess nur selten in auf (top) und es ist schwierig in der kurzen Zeit die Prozess-Id herauszufinden

Man könnte das auch sicherlich noch viel schöner machen, aber dazu müssten die Raumfelder was hören lassen (Stichwort pm-suspend hooks) ...
Danke jedenfalls allen hier, die zur Lösung beigetragen haben!


[Beitrag von davie2000 am 23. Okt 2016, 02:56 bearbeitet]
tomtiger
Administrator
#14 erstellt: 23. Okt 2016, 02:21
Hi,

fein!


davie2000 (Beitrag #13) schrieb:
Probleme habe ich nur damit, den Hintergrundprozess wieder zu killen:
Durch die sleeps taucht der Prozess nur selten in auf ('top') und es ist schwierig in der kurzen Zeit die Prozess-Id herauszufinden


da sollte ein "ps -ax | grep wol-daemon.sh" helfen.

LG Tom
davie2000
Stammgast
#15 erstellt: 23. Okt 2016, 02:46
Die Option '-ax' mag die busybox zwar nicht, aber prinzipiell funktioniert das - vielen Dank!
root@speaker:/opt $ ps -ax | grep wol-daemon.sh
ps: invalid option -- 'a'
BusyBox v1.22.1 (2016-09-21 16:24:44 UTC) multi-call binary.
Suche:
Das könnte Dich auch interessieren:
Raumfeld WOL
friedl1958 am 16.09.2015  –  Letzte Antwort am 21.09.2015  –  5 Beiträge
Raumfeld - Verständnisfrage
GrafGleni am 19.01.2014  –  Letzte Antwort am 19.01.2014  –  4 Beiträge
Raumfeld und NAS (Synology): Zugriff auf Musiksammlung per DLNA, SMB, .
suchenderweise am 15.06.2015  –  Letzte Antwort am 21.07.2015  –  4 Beiträge
Raumfeld per HTTP steuern?
Adam.K am 22.04.2013  –  Letzte Antwort am 24.04.2013  –  5 Beiträge
Raumfeld und NAS mit iTunes Bibliothek
Gaff am 10.01.2014  –  Letzte Antwort am 13.01.2014  –  16 Beiträge
Probleme NAS und Raumfeld Connector 2
sidvicious123 am 04.04.2015  –  Letzte Antwort am 04.04.2015  –  2 Beiträge
Wecker für Raumfeld mit einem Synology NAS
Merlin2011 am 02.11.2015  –  Letzte Antwort am 20.11.2015  –  6 Beiträge
Raumfeld One: Probleme ohne Ende
Cyberpunk73 am 30.12.2012  –  Letzte Antwort am 30.05.2015  –  8 Beiträge
Sonos/Raumfeld System integrieren
Desaster3 am 13.03.2013  –  Letzte Antwort am 19.03.2013  –  5 Beiträge
Raumfeld <-> Devolo DLAN ?
H_Tom am 07.08.2014  –  Letzte Antwort am 10.08.2014  –  4 Beiträge
Foren Archiv
2016

Anzeige

Aktuelle Aktion

Partner Widget schließen

  • beyerdynamic Logo
  • DALI Logo
  • SAMSUNG Logo
  • TCL Logo

Forumsstatistik Widget schließen

  • Registrierte Mitglieder925.721 ( Heute: 9 )
  • Neuestes Mitgliedelibyss
  • Gesamtzahl an Themen1.551.068
  • Gesamtzahl an Beiträgen21.537.328

Hersteller in diesem Thread Widget schließen