DS herunterfahren wenn kein Client mehr vorhanden

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
7
Punkte
0
wo liegt deine mount_root.sh-Datei? In dem gemeinsamen Ordner 'syno' ?

Dann würde der Kopierbefehl so ausssehen:

Rich (BBCode):
cp /volume1/syno/mount_root.sh /usr/syno/etc.defaults/rc.d

Was machst dann dort mit dieser Datei? Dateien in diesem Verzeichnis müssen mit Sxx (xx = 01 .. 99) anfangen, damit sie automatisch ausgeführt werden. Frag nicht warum das so ist ... ist einfach so. ;)

Itari
 

gustel

Benutzer
Mitglied seit
30. Dez 2009
Beiträge
68
Punkte für Reaktionen
0
Punkte
0
hi,

nein, die Datei liegt unter D:\syno\.
Dort habe ich die Datei zwischengespeichert weil ich sie nicht direkt in das /usr/syno/…. Verzeichnis kopieren konnte (mit Notepad++).
 

gustel

Benutzer
Mitglied seit
30. Dez 2009
Beiträge
68
Punkte für Reaktionen
0
Punkte
0
ok, ich habe die Datei in den web Ordner auf der DS verschoben.
Von dort konnte ich die Datei in das Verzeichnis rc.d kopieren.
Ich habe auch ein Leerzeichen zwischen den beiden Pfaden vergessen. :rolleyes:
 

goetz

Super-Moderator
Teammitglied
Mitglied seit
18. Mrz 2009
Beiträge
13.556
Punkte für Reaktionen
23
Punkte
328
Hallo,
ich habe den Rest mal zur Datenrettung verschoben.

LINK

Gruß Götz
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Hallo,
ich versuche dieses Skript umzusetzten (Ping an mehrere PC´s und Prüfung ob Backup läuft (rsnapshot - rsync)) aber wenn ich mehr als eine IP eintrage fährt meine DS runter und im log steht "shutdown Diskstation"

#!/bin/sh

# List of Hosts to check
HOSTS="192.168.178.10 192.168.178.11 192.168.178.37"
LOGFILE=/var/log/shutdown.log

log() {
echo `date +%c` $1 >> $LOGFILE
}

log "try to shutdown"

if [ ! "$(pidof rsync)" ]; then
ONLINE=0

for host in $HOSTS ; do
if ping -c 3 -w 1 $host > /dev/null; then
ONLINE=1
log "$host isn't offline"
fi
done

if [ $ONLINE -eq 0 ]; then
log "shutdown Diskstation"
/sbin/poweroff
fi
fi



Kann mir da einer helfen?
 

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
0
Hi!

Ich würde erst mal prinzipiell das bemängeln:
Die Variale ONLINE ist nicht initialisiert.
Egal ob ein Baclup läuft oder nicht, ONLINE ist nach der Abfrage immernoch 0.

Wenn dann deine Hostabfrage nicht funktioniert oder was findet, dann bleibt die 0 und dein System fährt runter.

Ansonsten habe ich den Teil getestet
Rich (BBCode):
# List of Hosts to check
HOSTS="192.168.0.2 192.168.0.3 192.168.0.5"


log() {
echo `date +%c` $1
}

log "try to shutdown"


for host in $HOSTS ; do
	if ping -c 3 -w 1 $host > /dev/null; then
	ONLINE=1
	log "$host isn't offline"
	log $ONLINE
	fi
done

und da kommt das hier raus
Rich (BBCode):
DS109> sh ./test1.sh
Sun Aug 22 11:38:28 2010 try to shutdown
Sun Aug 22 11:38:30 2010 192.168.0.2 isn't offline
Sun Aug 22 11:38:30 2010 1
Sun Aug 22 11:38:32 2010 192.168.0.3 isn't offline
Sun Aug 22 11:38:32 2010 1
DS109>

Wie du siehst tut es prinzipiell schon...
Hast vielleicht woanderst ein Fehler?

Gruß
Ralf
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Vielen Dank für die Antwort.

ich hab das so nachgestellt, wie du beschrieben mit dem gleichen Ergebniss wie du. So hat es funktioniert.
Ich hab mir das Skript nochmal logisch angesehen. Was mir dabei aufgefallen ist, dass sobald ich 2 IP´s als Host eintrage möchte er vielleicht als Antwort alle IPs haben und sobald eine nicht antwortet, fahre herunter!?!

Wie bekomme ich es so hin, dass sobald eine IP erreichbar ist, online 1 ist?

viele Grüße
Brainwolf
 

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
0
Eigentlich genau so wie es hier ist...

Bei mir gibt es keine 192.168.0.5 und folglich ist die bei mir auch nicht online.
 

jahlives

Moderator
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
2
Punkte
0
Mach doch nach dem ersten erfolgreichen ping einfach ein exit. Sobald einer der Hosts noch Online ist kannst du die Prüfung ja abbrechen und das Script verlassen
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
vielen Dank für euere Hilfe.

Hier mein funktionierendes shutdown-skript.

Code:
# List of Hosts to check
HOSTS="192.168.178.46 192.168.178.10 192.168.178.11"

LOGFILE=/var/log/shutdwn.log
ONLINE=0
BACKUP=0

log() {
echo `date +%c` $1 >> $LOGFILE
}

log "try to shutdown" printf \n >> $LOGFILE


if (ps aux | grep rsnapshot | grep -v grep) ; then
        BACKUP=1
	log " Backup läuft!"	printf "\n" >> $LOGFILE 
else
	BACKUP=0
	log " Backup läuft nicht!"	printf "\n" >> $LOGFILE
	fi

for host in $HOSTS ; do
	if ping -c 3 -w 1 $host > /dev/null; then
	ONLINE=1
	log " $host ist online!"		printf "\n" >> $LOGFILE
	

fi	
done

if [ $ONLINE -eq 0 ] && [ $BACKUP eq 0 ]; then
	log "Diskstation wird heruntergefahren!"	printf "\n" >> $LOGFILE
#	/sbin/poweroff
fi

das letzte # muss natürlich für den Echtbetrieb herausgenommen werden. Auch die Logeinträge können ja je nach Geschmack angepasst werden.

Viele Grüße
Brainwolf
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Hier nochmal eine Änderung meines Skripts.

wenn die HOSTS nicht erreichbar sind, wird ein 2. mal geprüft mit 2 Min. abstand.
Beim herunterfahren wird ein ntp-Server abgefragt.

Code:
# List of Hosts to check
HOSTS="192.168.178.10 192.168.178.11"

LOGFILE=/var/log/shutdwn.log
ONLINE=0
BACKUP=0

log() {
echo `date +%c` $1 >> $LOGFILE
}

log "Versuche DS auszuschalten" printf "\n", >> $LOGFILE


if (ps aux | grep rsnapshot | grep -v grep) ; then
        BACKUP=1
	log "Backup läuft!"	printf "\n" >> $LOGFILE 
	else
	BACKUP=0
fi	


for host in $HOSTS ; do
	if ping -c 3 -w 1 $host > /dev/null; then
	ONLINE=1
	log "$host ist online!"			printf "\n" >> $LOGFILE
  	fi

if [ $ONLINE -eq 0 ]; then
	log "2. PING Versuch!"			printf "\n" >> $LOGFILE 
	sleep 120
	 if ping -c 3 -w 1 $host > /dev/null; then
	 ONLINE=1
	 log "$host ist online!"			printf "\n" >> $LOGFILE
	fi	
fi

if [ $ONLINE -eq 0 ] && [ $BACKUP -eq 0 ]; then
	log "Diskstation wird heruntergefahren!"	printf "\n" >> $LOGFILE
	/usr/sbin/ntpdate -b de.pool.ntp.org
	sleep 10
	/sbin/poweroff
  fi
done

Viele Grüße
Brainwolf
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
0
Hi Brainwolf,

der 2te Versuch ist eigentlich eine ganz gute Idee.
Werd das bei mir auch mal mit einbauen.

Ich würde vielleicht noch ganz gerne prüfen ob gerade noch ein Kopierprozess läuft, hat jemand ne Idee wie man das umsetzen kann?

Am wichtigsten wäre mir das Kopieren auf USB, da ist das Problem, dass Prozesse, die man zum Prüfen nutzen könnte nach Abschluss des Kopierens nicht beendet werden (z.B. ntfs-3g oder so).


Grüße
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Hallo,

läuft eigentlich genauso wie in meinem Skript mit rsnapshot. Kommt darauf an, wie ein Kopierprozess aufgerufen wird.

Code:
if (ps aux | grep rsnapshot | grep -v grep) ; then

Wenn mit "cp" dann einfach "rsnapshot" mit "cp" ersetzten.
Am besten startest du mal deinen Kopiervorgang uns schaust auf der DS unter Resourcen-Monitor (oder bash mit "top") den Prozess an, der dann so lange läuft wie du kopierst.

viele Grüße
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
0
Ja,

so hatte ich mir das gedacht, das ist ganz oben der ntfs-3g.
Aber der wird nach dem Kopieren halt leider nicht beendet...
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Aber der NTFS-3g ist ja nicht der Befehl zum kopieren, sondern der Filesystem-interpreter für NTFS und FAT Laufwerke.

Da muss noch ein anderer Dienst laufen der kopiert. cp oder rsync o.ä.
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
0
Das ist halt irgendwie das Problem, dass ich habe.
Wenn ich das mit top überwache kommt nur eine file_mvcd.cgi oder so ähnlich dazu, aber das hat ja mit dem Kopierprozess an sich wenig zu tun.

Hast du irgendeine Idee?
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Ahh, jetzt.

Du kopierst die Files über File Station. Stimmt, da wird bei mir auch nichts angezeigt.

Aber, wenn du so ein File kopierst, dann ist doch min. ein PC an!?! Also prüft mein Skript ja nach der IP und die ist da erreichbar. Somit kein shutdown!
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
0
Bei mir wird der PC nicht geprüft, nur der MediaPlayer.
Und es wäre halt nett wenn ich z.B. nen Kopier-Job starte und der Nas dann runter fährt wenn er z.B. morgens um 4 fertig wird und nicht z.B. um 2 wenn der Cronjob das erste mal startet und die definierten Bedingungen alle nicht zutreffen. Man könnte zwar das Script dann deaktivieren, ist aber umständlich und man denk nicht immer dran.
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Ich komm jetzt nicht ganz mit.

Wie kopierst du denn die Files auf USB?? Wenn über skript, dann poste mal.

Verstehe jetzt die Logik nicht so ganz.

Du hast einen Mediaplayer (UPNP-Gerät). Eine DS, auf welcher der Mediaplayer zugreift. Wenn dieser aus ist, dann soll die DS herunterfahren. (Skript: Ping auf Mediaplayer).

Nun kopierst du von deinem PC ein File auf die DS und das passiert z.B. Nachts. Also dein PC ist so lange an, bis du ihn am nächsten Früh ausschaltest. Inzwischen soll die DS aber nach dem kopieren, und wenn der Mediaplayer aus ist herunterfahren? Warum denn? Der PC/Laptop braucht bestimmt mehr Strom als die DS.

Oder wenn du die Files von der DS auf eine USB-Platte kopieren willst, bau dir doch dazu ein skript mit cp oder rsync (wenn die Strucktur immer gleich bleiben soll) und schalte dein PC aus. Nun werkelt die DS alleine und kannst somit den CP-Befehl abfragen mit meinem Skript. Wenn das dann durch ist, fährt die DS herunter.

Oder hab ich da etwas nicht ganz verstanden?
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
0
Wie kopierst du denn die Files auf USB?? Wenn über skript, dann poste mal.

Ich stell im DS-Manager ein Kopier-Job an. Z.B. den Ordner Musik auf die angeschlossene USB-Platte. Oder von USB auf den NAS. Irgendwie sowas.

Du hast einen Mediaplayer (UPNP-Gerät). Eine DS, auf welcher der Mediaplayer zugreift. Wenn dieser aus ist, dann soll die DS herunterfahren. (Skript: Ping auf Mediaplayer).

Richtig

Nun kopierst du von deinem PC ein File auf die DS und das passiert z.B. Nachts. Also dein PC ist so lange an, bis du ihn am nächsten Früh ausschaltest.

Mein PC ist eigentlich 24/7 an, der NAS nur wenn ich oder sonst wer den MediaPlayer nutzt.

Oder wenn du die Files von der DS auf eine USB-Platte kopieren willst, bau dir doch dazu ein skript mit cp oder rsync (wenn die Strucktur immer gleich bleiben soll) und schalte dein PC aus. Nun werkelt die DS alleine und kannst somit den CP-Befehl abfragen mit meinem Skript. Wenn das dann durch ist, fährt die DS herunter.

Ist halt nicht immer gleich, das ist das Problem.

Oder hab ich da etwas nicht ganz verstanden?

Nochmal kurz zusammen gefasst. Die DS soll um 2 Uhr Nachts runter fahren, wenn:

1. Kein Download der DS mehr läuft (erledigt)
2. Niemand mehr per FTP verbunden ist (erledigt)
3. Der MediaPlayer aus ist (erledigt)
4. Kein Kopierjob auf der DS läuft, also von USB, auf USB, von Ordner1 in Ordner2 o.Ä.