Reihenfolge der Shutdownskripte / WOL über IP Steckdose

Status
Für weitere Antworten geschlossen.

thoster

Benutzer
Mitglied seit
09. Okt 2012
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,
damit ich meine DS auch ohne WOL aufwecken kann, habe ich mir eine IP-Steckdose zugelegt...
Schaltet man mit der IP-Steckdose den Strom an, startet die DS ja aber leider nur, wenn sie vorher nicht normal/sauber runtergefahren wurde :( - also man ihr quasi im letzten Moment den Strom entzogen hat, bevor sie ganz fertig war mit Herunterfahren).

Die IP-Steckdose kann nun durch CGI-Befehle ausschalten werden und die kann ich von der DS aus mit WGET absetzten!

Also habe ich voller Vorfreude ein kleines Skript geschrieben, welches mit dem CGI-Befehl die Steckdose ausschalt und /usr/syno/etc/rc.d plaziert, als "S01aaaaa.sh" plaziert, so dass es beim Runterfahren NACH den ganzen anderen Skripten dort ausgeführt wird.
Aber, nun kommt die Entäuschung: Mein Skript dort wird zwar aufgerufen - aber es ist "zu früh", denn anscheindend sind zu diesem Zeitpunkt im "Shutdown-Prozess" der Synology die Festplatten noch gemountet, so dass es noch zu früh wäre, den Strom einfach auszuschalten...

Hat jemand da vielleicht einen Tipp/eine Idee? An welcher Stelle könnte man ein Skript plazieren, damit es aufgerufen wird NACHDEM die Festplatten weg sind?
(/usr/local/etc/rc.d habe ich auch schon probiert - aber das wird beim herunterfahren anscheindend noch VOR /usr/syno/etc/rc.d durchlaufen...)

Was passiert in welcher Reihenfolge beim Shutdown einer DS? Und wo kann man da eingreifen?
Gruß
thomas
 

thoster

Benutzer
Mitglied seit
09. Okt 2012
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
ja, die Reihenfolge der Skripte im /usr/syno/etc/rc.d/ habe ich jetzt mal getestet: Zwei Skripte S49test.sh und S51test.sh angelegt, die nichts tun, außer ihre Nummer (49 bzw 51) ins /var/log/messages schreiben, wenn sie dran sind.
Ergebnis: Beim Starten der DS, werden die Skripte in der Reihenfolge S00->S99 aufgerufen. Beim Herunterfahren aber genau in umgekehrte Reihenfolge, also S99->S00...
Irgendwie macht das schon Sinn, falls irgendwas auf irgendwas anderem basiert, oder sowas.
Was passiert denn beim Herunterfahren, wenn S00* durch ist?
Hmm, das Programm, was die Skripte der Reihe nach aufruft, welches ist das? Und was macht das, wenn es mit denen durch ist? Vielleicht ruft das dann als nächstes ein umount auf? Und danach könnte ich dann meinen Code reinhängen, der der NAS den Saft abdreht...
 

Puppetmaster

Benutzer
Sehr erfahren
Mitglied seit
03. Feb 2012
Beiträge
18.984
Punkte für Reaktionen
624
Punkte
484
Baue dir doch ein script, daß beim herunterfahren startet und dann solange prüft, ob /volume1 noch gemountet bis es nicht mehr gemountet ist. Danach kann das script ja den Saft abdrehen.

Insgesamt finde ich die Lösung mit dem "Strom aus" eher unschön. Kannst oder willst du nicht mit WOL arbeiten?
 

thoster

Benutzer
Mitglied seit
09. Okt 2012
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Ja, WOL wäre mir auch lieber.
Meine DS712+ unterstützt auch WOL - aber mit ihren zwei Netzwerkanschlüssen bietet sie auch "Link Aggregation" (LACP).
Das habe ich aktiviert - musste aber leider feststellen das WOL seit dem nicht mehr funktioniert :(
Nach ein wenig Recherche hat ich herausgefunden das WOL mit LACP wohl anscheinend generell nicht funzt.

Wie würde so ein Skript den Linuxtechnisch aussehen? Dann probiere ich damit mal herum.
Sowas wie eine Schleife, in deren Bedingung immer wieder geschaut wird, ob volume1 noch gemounted ist, und sobald das nicht mehr der Fall ist, den Strom abdreht?
Da müsste ich dann im /usr/local/etc/rc.d/ ein skript anlegen, welches das "Schleifen-skript" im Hintergrund startet, damit der Shutdown-Prozess nicht darauf wartet, sondern mit den anderen Dingen weitermacht, oder?
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.017
Punkte für Reaktionen
272
Punkte
393
Hallo,
suche mal im Forum nach savemode, komme gerade mit Abdroid und Link kopieren nicht klar.

Gruß Götz
 

thoster

Benutzer
Mitglied seit
09. Okt 2012
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Hmm, jetzt habe ich mal nach "savemode" gesucht und bin über ein skript gestolpert, welches die S00-S99-Skripte alle ausführt und dann die Platten umounted.
Da könnte ich meinen CGI-Aufruf noch hinterhängen....
Ist dieses Skript denn eigentlich noch "up-to-date"?
Bei meinen Recherchen bin ich über SYNO_POWEROFF_TASK gestolpert.... das könnte ich doch auch einfach nehmen und anschließend noch mein CGI-Aufruf?

Allerdings, in beiden Fällen dürfte ich dann die DS nicht auf normale Weise runterfahren (z.B. im DSM den "Herunterfahren" button drücken),
sonst würde sie anschließend nicht mehr auf die IP-Steckdose reagieren.
 

Puppetmaster

Benutzer
Sehr erfahren
Mitglied seit
03. Feb 2012
Beiträge
18.984
Punkte für Reaktionen
624
Punkte
484
Hast du denn auch die Möglichkeit mit dem eingelöteten Kondensator gesehen?
Das scheint mit eine sehr schöne Lösung zu sein.
Da kann die DS ja auch ganz normal herunterfahren.
 

thoster

Benutzer
Mitglied seit
09. Okt 2012
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Aber geht das denn auch noch mit neueren Modellen, wie der 712+ ? Die Beiträge die ich im Forum gefunden habe sind alle schon etwas älter und beziehen auf andere Modelle.
Hat da jemand Erfahrungen mit aktuellen Modellen?
Ein wenig Respekt hätte ich eigentlich auch davor das Ding auseinanderzunehmen und mit dem Lötkolben loszulegen...
 

Puppetmaster

Benutzer
Sehr erfahren
Mitglied seit
03. Feb 2012
Beiträge
18.984
Punkte für Reaktionen
624
Punkte
484
Doch das Prinzip ist immer noch dasselbe: Der Kondensator wirkt beim Anschluß an die äußere Spannung wie ein geschlossener Schalter, also so, als würdest du die Taste drücken.

Aber nach zweitem Nachdenken halte ich deinen ursprünglichen Plan auch für fragwürdig.
Wer sagt dir denn, daß zu dem Zeitpunkt beim Herunterfahren nach dem Unmounten der Platte überhaupt noch der Status gesetzt werden kann, daß es ein 'unsauberer' Shutdown war?! Vielleicht muß die Platte dazu ja gerade gemountet gewesen sein, damit das zutrifft... Verstehst du, was ich meine?
 

thoster

Benutzer
Mitglied seit
09. Okt 2012
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Jetzt habe ich mal die Sache mit dem Skript ausprobiert, das so lange im Hintergrund warted, bis die Festplatten nicht mehr gemounted sind, und dann den Strom wegnimmt.
Also im /usr/local/etc/rc.d/ ein Skript angelegt, das im Herunterfahren-Fall ein weiteres Skript im Hintergrund aufruft.
Der Shutdownprozess läuft also weiter... und kommt irgendwann zu dem Punkt wo die Festplatten ungemounted werden.

Das Skript im Hintergrund prüft währnddessen die ganze Zeit in einer while-Schleife, ob volume1 noch gemounted ist, und wenn das nicht mehr der Fall ist, dann gibt es den OFF-Befehl and die IP-Steckdose ab.

In der Theorie klangs ja ganz gut. Das Problem kam dann in der Praxis:
Die Steckdosen müssen ja OFF geschaltet werden, NACHDEM der Festplatten-Mount weg ist, aber BEVOR die DS selber mit dem Shutdown fertig geworten und ausgeschaltet hat.

Ich hab bei meinen Tests festgestellt, das man nicht sofort wenn die Festplatten ge-unmounted sind, den Strom wegnehmen darf. Wenn man das tut, kriegt man beim nächsten Anschalten ein "...consitancy-Check-email..." geschickt. (das ist vielleicht sowas wie die gelbe Karte? - die Rote Karte wäre dann das email "..DS experienced impropper shutdown..." )
Man muss also etwas warten - aber nicht zu lange, sonst ist die DS selber plötzlich fertig mit dem Shutdown.
Bei mir waren ein Wert von ungefähr 0.2s OK - dann ging es meistens gut. Will heissen, kein email von der DS nach erneutem Start und aber Start durch Strom anlegen war möglich.

Soweit so gut. Das konkrete Problem ist aber anscheinend das der Zeitraum zwischen "Befehl an die IP-Steckdose über Ethernet-Kabel" geben und "Steckdose schaltet aus" irgendwie nicht konstant ist. Also gefühlt geht das ziemlich sofort. Aber - vielleicht abhängig davon , was die Steckdose gerade sonst so macht, oder, wieviel die Switches dazwischen gerade zu tun haben, oder was sonst so im Netz los ist - manchmal dauert es eben vielleicht 1s länger....
...und dann ist die DS längst schon von selber aus.

Fazit ist also, das in vielleicht 70% der Fälle die DS "gut" ausgeht. (Ohne email danach - aber ließ sich durch Strom anlegen starten) aber in den anderen 30 Fällen ist eben eines dieser beiden Sachen passiert.
Nicht sehr zuverlässig dieser Weg...
 

Frogman

Benutzer
Mitglied seit
01. Sep 2012
Beiträge
17.485
Punkte für Reaktionen
8
Punkte
414
Ich kenne die DSM-Scripte beim Shutdown nicht wirklich genauer, aber könnte man vielleicht dort, wo die DS dann nach dem unmount wirklich ausgeschaltet wird, noch eine 2-3 sec-Pause einbauen, damit Du die Zeit gewinnst, Deinen Befehl sauber ans Ziel zu bringen?
 

Puppetmaster

Benutzer
Sehr erfahren
Mitglied seit
03. Feb 2012
Beiträge
18.984
Punkte für Reaktionen
624
Punkte
484
Ich kenne die DSM-Scripte beim Shutdown nicht wirklich genauer, aber könnte man vielleicht dort, wo die DS dann nach dem unmount wirklich ausgeschaltet wird, noch eine 2-3 sec-Pause einbauen, damit Du die Zeit gewinnst, Deinen Befehl sauber ans Ziel zu bringen?

Das Problem hier ist wohl, das man das script (wenn es denn überhaupt eins ist) nicht kennt, wo der unmount passiert.

EDIT:
Ich halte nach wie vor die Variante mit dem Elko auch für die schönste. Hier kann die DS ja auch ganz normal heruntergefahren werden.
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.017
Punkte für Reaktionen
272
Punkte
393
Hallo,
nach dem unmounten der Volumes wird noch eine /var/.NormalShutdown angelegt, die bestimmt beim Start der DS ob Quotacheck oder nicht.
touch /var/.NormalShutdown
Also in die Schleife die Abfrage ob /var/.NormalShutdown existiert und aus die Maus.

Gruß Götz
 

thoster

Benutzer
Mitglied seit
09. Okt 2012
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Habe das gleich mal probiert. :)
Bei meinem DSM4.1 wird diese /var/.NormalShutdown zwar angelegt, aber leider schon einige Zeit bevor die Platten ge-unmounted sind.
Zum Testen habe ich ein Skript ins /usr/local/etc/rc.d/-Verzeichnis gelegt, das beim Herunterfahren 2 weitere Skripte im Hintergrund startet:
Das erste wartet und schreibt einen Eintrag ins /var/log/messages, sobald die Platten ge-unmounted sind.
Das zweite wartet und schreibt den Eintrag ins /var/log/messages, sobald die Datei /var/.NormalShutdown vorhanden ist.
Und der Eintrag vom Zweiten befindet sich einige Zeilen vor dem Eintrag vom Zweiten.

Beim googlen nach .NormalShutdown bin ich auf einen Beitrag gestossen, wo etwas von "echo X > /dev/ttyS1" die Rede ist.
Dort klang es so, als würde man darüber Befehle ans BIOS senden - oder so ähnlich. Zumindest kann man Töne erzeugen und LEDs blinken lassen :eek:
Dabei stellt sich ja die Frage, wie die DS beim Herunterfahren dem BIOS miteilt, das es nicht (oder eben doch) hochfahren soll, wenn das nächstemal Strom angelegt wird...

Habe mir dann gleich ausgemalt, dass vielleicht das BIOS im Normalbetrieb immer auf "Aufwecken bei Stromanlegen" eingestellt ist - aber beim Herunterfahren, ganz am Ende wenn alles gut verlaufen ist, der Shutdown noch schnell dieses Flag im BIOS mit dem ttyS1 umschießt und ihm mitteilt: "Beim nächsten Stromanlegen brauchst Du doch nichts zu tun, weil, wir sind sauber runtergekommen...".
Um das weiter zu verfolgen müsste ich aber wissen, wie ich die Befehle, die beim Herunterfahren an ttyS1 geschickt werden, protokollieren lassen kann, um sie mir beim nächsten Neustart anzuschauen... - dazu reicht mein Linux leider nicht.
Falls da jemand ein paar Codezeilen parat hätte, könnte ich das mal tracen.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat