DS herunterfahren wenn kein Client mehr vorhanden

  • Lange schon haben wir uns gewünscht, diese Mitteilung veröffentlichen zu können. Seit langer Zeit planen wir den Umzug auf neue Server und nun ist es geschafft. Um euch einen Einblick hinter die Kulissen zu geben haben wir einen extra Beitrag geschrieben:

    Das Forum hat eine neue Heimat bei netcup gefunden

    Wir möchten uns ganz herzlich bei netcup bedanken! necup stellt uns die neuen Server. Schaut mal in unsere Beiträge, was sich durch den Umzug alles verbessert hat.

Beefjerckey

Benutzer
Mitglied seit
10. Mrz 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Du hast unter "Hardware & Energie / Ruhezustand der Festplatte" auch nicht die Option "Automatisches Ausschalten aktivieren" ganz unten?

Wenn dem so ist, würde ich Dein Skripte einfach ausprobieren. Die Idee dahinter ist richtig. Mir ist nur nicht klar, warum Du den Ping zweimal in der Schleife hast. Willst Du damit sicherstellen, dass der Shutdown immer erst die waittime (in Deinem Fall 5min.) später erfolgt, als die Bedingung erfüllt ist?

Also, die Scripte laufen soweit, bin noch am Feintuning.
Die Schleife soll sicherstellen, dass wenn ein Rechner gerade am rebooten (Bspl.) ist, er trotzdem "erfasst" wird.
Eine Frage taucht aber auf:
Wie kann ich prüfen/erkennen das "mein" script läuft?
Gibt es dazu eine (einfache) Möglichkeit zu testen ob das Script (noch) lebt?
 

dil88

Benutzer
Mitglied seit
03. Sep 2012
Beiträge
28.577
Punkte für Reaktionen
3
Punkte
644
Du kannst entweder schauen, ob der Name in der Prozessliste auftaucht (ps) bzw. seine Prozess ID, oder eine Lock-Datei zu Beginn des Sktipts anlegen und am Ende löschen, deren Existenz Du dann testen kannst.
 

Beefjerckey

Benutzer
Mitglied seit
10. Mrz 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Ich verstehe nur Bahnhof.
Kann ich das im Info-Center -> Dienste sehen?
Oder muss ich dazu zwangsweise auf die Kommandozeile?

Oder:
Was würde passieren, wenn ich das Script mit dem Taskplaner einfach alle 15 Minuten starte?
Läuft das dann tatsächlich mehrfach?
 
Zuletzt bearbeitet von einem Moderator:

dil88

Benutzer
Mitglied seit
03. Sep 2012
Beiträge
28.577
Punkte für Reaktionen
3
Punkte
644
M.E. ist das etwas für die Kommandozeile. Wenn Du das als Cronjob alle 15 Min. laufen läßt und die Laufzeit länger als 15min. sein kann, wird es parallel laufen, klar.
 

Beefjerckey

Benutzer
Mitglied seit
10. Mrz 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Könnte man das Script nicht, sobald es durchgelaufen ist, wieder beenden.
Und alle x Minuten neusterten?
 

jahlives

Moderator
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
3
Punkte
0
klar könnte man es auch wieder beenden. Sagt ja keiner, dass das Teil in einer Endlosschleife laufen muss. Dann einfach vom Script ein Lockfile anlegen lassen, am besten mit PID drin und beim Aufruf prüfen ob dieses File existiert und die angegebene PID noch in der Prozessliste zu finden ist. Am Ende entfernt das Script das Lockfile wieder. So kannst du verhindern, dass cron das Script nochmals startet solange eine vorherige Instanz noch läuft
 

Beefjerckey

Benutzer
Mitglied seit
10. Mrz 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Das hört sich schon mal gut an!
Kannst Du das vielleicht mal für Windows Dummys übersetzen?
 

AndreasD

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe eine DS115 (mit V6) als Backup Server in Betrieb genommen, alle Rechner im LAN sichern auf diese Station, in der Regel zu festen Zeiten. Auf den einzelnen PC's (alle Win 10) wird beim Systemstart ein WOL abgesetzt (als Aufgabe in Win 10 definiert). So das die DS115 schon startet bevor die Sicherung auf dem PC anläuft. Das für den Fall das der PC außerhalb der Sicherungszeiten gestartet wird und Sicherungen nachholt.

Jetzt müsste die DS115 nicht immer weiter laufen sondern könnte sich nach erfolgreicher Sicherung und wenn alle PC ausgeschaltet sind, wieder runter fahren.

Ich bin bei meiner Suche nach einer Lösung auf diesen Thread hier gestoßen und habe alle 19 Seiten gelesen, vieles davon ist schon recht alt und vermutlich schon überholt, anderes betrifft spezielle Anpassungen bzgl. der XBOX. Jedenfalls gibt es hier diverse Ausführungen von diesen Script.

Meine Frage welches Script würde denn für meine Anforderung passen:

- Alle PC's off, DS115 kann runter fahren aber nur wenn keine Sicherung auf externe Platte läuft.

Ich glaube ab der Version 5 kann man doch Aufgaben planen, mit eigenen Scripten und muss nicht irgendwelche Cron Jobs manuell einrichten, wie auf den ersten Seiten beschrieben. Von daher meine Bitte könnte jemand der ein solcher Script am laufen hat das mal hier zur Verfügung stellen und wie er die Aufgabe eingerichtet hat.

Gruß


Andreas
 

dil88

Benutzer
Mitglied seit
03. Sep 2012
Beiträge
28.577
Punkte für Reaktionen
3
Punkte
644
Eigentlich sollte dafür die Funktion passen, die die DS nach Eintritt des HD-Ruhezustands herunterfährt (in der Systemsteuerung unter Energieoptionen - zumindest in DSM 5.2)
 

AndreasD

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hallo,

danke für den Tipp das werde ich mal ausprobieren, es ist also gar nicht notwendig so aufwendig mit Scripten zu hantieren, klingt gut.

Gruß

Andreas
 

dil88

Benutzer
Mitglied seit
03. Sep 2012
Beiträge
28.577
Punkte für Reaktionen
3
Punkte
644
Denke schon, die Funktion müsste eigentlich gut passen. Der HD-Ruhezustand wird ja nur erreicht, wenn wirklich nichts mehr läuft.
 

AndreasD

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe die Einstellung soeben mal vorgenommen. Nach 20min geht die Platte in den Ruhezustand und 10min später schaltet sich die DS aus, diese Option steht aber nur zur Verfügung wenn WOL an der DS aktiviert ist. Was auch Sinn macht, so lässt sich ein Start und Ende Zyklus komplett von außen steuern ohne das die DS räumlich erreichbar sein muss.

Die entsprechenden Einstellungen findet man auch in DSM 6 unter Systemsteuerung unter Energieoptionen.

Gruß

Andreas
 

jahlives

Moderator
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
3
Punkte
0
Kannst Du das vielleicht mal für Windows Dummys übersetzen?
was jetzt, das mit dem Lockfile? Das wäre recht einfach
Code:
#!/bin/sh
LOCKFILE=/tmp/meinScript.lock
[ -e $LOCKFILE ] && echo 'Script läuft schon' && exit 0
touch $LOCKFILE
# dein restlicher Scriptcode
....
# am Ende des Scripts das Lockfile löschen
rm -f $LOCKFILE
 

Beefjerckey

Benutzer
Mitglied seit
10. Mrz 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Danke schon mal.

Dazu meine Fragen:
Wie muss das file heissen, oder ist das wurscht?
Wo muss das file gespeichert werden?
Muss dem file irgendwie Rechte gegeben werden, falls ja, welche und wie?
Wer, bzw. wie wird das file gestartet?

Danke für eure Unterstützung!
 

dil88

Benutzer
Mitglied seit
03. Sep 2012
Beiträge
28.577
Punkte für Reaktionen
3
Punkte
644
jahlives hat dazu in seinem Skript schon Vorschläge gemacht: LOCKFILE=/tmp/meinScript.lock. Dort einfach "meinScript" durch den Namen Deines Skripts ersetzen. Die übrigen Fragen beantwortet auch sein Beispielskript, das ja das komplette Handling der Lock-Datei beschreibt.
 

Beefjerckey

Benutzer
Mitglied seit
10. Mrz 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Tja, da bin ich dann wohl zu blöd zu, oder ich stehe auf der Leitung!

Ich habe 2 Scripte (siehe ).
Und welches jetzt?
Und nur den Script-Name, oder mit Dateiendung?
Die übrigen Fragen beantwortet auch sein Beispielskript, das ja das komplette Handling der Lock-Datei beschreibt.
Ist das so?
Ich hatte ja oben einige Fragen gehabt. Die stellen sich mir immernoch.
Leider kann ich mit meinen bescheidenen Linux-Kenntnissen mit Euch nicht mithalten.
Daran wird sich mit o.g. 2-Zeilern wohl auch nichts ändern.

Schade halt.
 

dil88

Benutzer
Mitglied seit
03. Sep 2012
Beiträge
28.577
Punkte für Reaktionen
3
Punkte
644
Das erste Skript, das ist das eigentliche Skript. Das zweite sorgt lediglich dafür, dass das erste beim Booten der DS gestartet wird.

Mein Vorschlag wäre, dass Du die Zeilen, die jahlives gepostet hat, einfach einmal einbaust und dann schaust, ob es funktioniert. Ich kann Dir aber bei Bedarf auch die einzelnen Zeilen erklären, wenn das weiterhilft.
 

Beefjerckey

Benutzer
Mitglied seit
10. Mrz 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Mein Vorschlag wäre, dass Du die Zeilen, die jahlives gepostet hat, einfach einmal einbaust und dann schaust, ob es funktioniert.
Okay, das bekomme ich hin.
Ich kann Dir aber bei Bedarf auch die einzelnen Zeilen erklären, wenn das weiterhilft.
Das wäre natürlich super!
Ich kann mit dem Begriff Lockfile nämlich nichts anfangen.
Gibt es dazu evtl. ein DOS-Pendant?
 

dil88

Benutzer
Mitglied seit
03. Sep 2012
Beiträge
28.577
Punkte für Reaktionen
3
Punkte
644
Ein Lockfile ist schlicht eine beliebige Datei, die dann, wenn sie existiert, deutlich macht, dass ein Programm läuft. Üblicherweise schreibt man in die Datei die Process ID (pid), so dass man den zugehörigen Prozess identifizieren kann. Zu Beginn wird zunächst einmal geschaut, ob es die Lockdatei schon gibt ([ -e steht für test -e und testet auf Existenz einer Datei). Wenn ja, wird eine entsprechende Meldung ausgegeben und das Skript beendet, ohne etwas zu tun. Ansonsten wird die Lockdatei erzeugt (per touch-Befehl), das Skript abgearbeitet und die Lockdatei am Ende des Skripts per rm (= remove) wieder gelöscht.
 

Beefjerckey

Benutzer
Mitglied seit
10. Mrz 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Okay, danke.
Das heißt doch, dass ich dann das Script (mit Deinem Code) einfach z. Bspl. alle 30 Minuten per "Aufgabenplaner" starten kann, oder?
Und ich benötige damit keine 2 Scripte mehr.
Kann ich mein Script also einfach mit dem Editor vom Midnight Commander editieren und speichern, oder muss ich danach noch irgendwelche Rechte vergeben/startbar machen, oder anderes?

Wäre das hier dann meine Lösung:
Rich (BBCode):
#!/bin/sh
LOCKFILE=/tmp/autoshutdown.lock
[ -e $LOCKFILE ] && echo 'Script läuft schon' && exit 0
touch $LOCKFILE

host=192.168.0.xxx
host2=192.168.0.xxx
host3=192.168.0.xxx
waittime=300

while true; do
      ping -c 1 $host || ping -c 1 $host2 || ping -c 1 $host3 > /dev/null
      if [ $? == 1 ]; then
         sleep $waittime
         ping -c 1 $host || ping -c 1 $host2 || ping -c 1 $host3 > /dev/null
         if [ $? == 1 ]; then
            # shutdown DS
            poweroff
         fi
      fi
      sleep $waittime
done;

# am Ende des Scripts das Lockfile löschen
rm -f $LOCKFILE

Und das Script heißt dann autoshutdown.sh
 
Zuletzt bearbeitet:
NAS-Central - Ihr Partner für NAS Lösungen