DS herunterfahren wenn kein Client mehr vorhanden

user123

Benutzer
Mitglied seit
16. Sep 2009
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Ich dachte in diesem Fall wäre die Box noch verbunden:

Rich (BBCode):
netstat -n | grep $XBOXIP'.*ESTABLISHED' > /dev/null

Ja, das ist auch so. Aber in meinem Beispiel drehe ich durch das Ausrufezeichen die IF-Abfrage um. Das kann man ja machen wie man möchte, je nachdem was man verarbeiten möchte :)
 

ic167

Benutzer
Mitglied seit
04. Jan 2010
Beiträge
25
Punkte für Reaktionen
0
Punkte
0
Folgendes Script läuft gerade auf meiner DS und es scheint so zu funktionieren mit meiner Xbox 360:

#!/bin/sh

LOGFILE=/var/log/shutdown.log

log() {
echo `date +%c` $1 >> $LOGFILE
}
log "try to shutdown"

ONLINE=1

XBOXIP=192.168.0.110
if ! netstat -n | grep $XBOXIP'.*ESTABLISHED' > /dev/null; then
ONLINE=0
fi

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


Irgendwelche Einwände es so zu machen oder aber auch Verbesserungsvorschläge?
Bliebe noch die Idee mit dem Script zu prüfen ob die Downloadstation aktiv ist und dann keinen shutdown zu machen.
 
Zuletzt bearbeitet:

coolhot

Benutzer
Mitglied seit
01. Mrz 2009
Beiträge
926
Punkte für Reaktionen
0
Punkte
0
Vielleicht könnte man für das prüfen der DL-Aktivität die CPU-Last der Prozesse wie rtorrent usw. aus der Ausgabe von ps extrahieren?

Wenn alle 0 sind dann herunterfahren.
 

ic167

Benutzer
Mitglied seit
04. Jan 2010
Beiträge
25
Punkte für Reaktionen
0
Punkte
0
Habe mir noch ein bißchen angeschaut was beim Aufruf von netstat alles so erscheint und mir ist aufgefallen das sobald die DownloadStation läuft eine IP mit einer ":http"-Endung angezeigt wird. Habe dann mal das Script folgendermaßen erweitert:

#!/bin/sh

LOGFILE=/var/log/shutdown.log

log() {
echo `date +%c` $1 >> $LOGFILE
}
log "try to shutdown"

ONLINE=1

XBOXIP=192.168.0.110
if ! netstat -n | grep $XBOXIP'.*ESTABLISHED' > /dev/null; then
if ! netstat | grep 'http' > /dev/null; then
ONLINE=0
fi
fi

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


Die zweite If-Abfrage schaut ob beim Aufruf von netstat "http" erscheint. Bisher hat das Script alle Trockenübungen erfolgreich durchlaufen. Heut Nacht wird dann mal die DownloadStation angeschmissen und das Script per cronjob alle 30 Minuten ausgeführt.
Morgen kann ich dann hoffentlich Erfolge melden.
Noch ne Frage am Rande: Kann es sein das der Befehl netstat-n nur alle paar Minuten ausgeführt werden kann? Meine DS hat zumindest nicht reagiert wenn man den Befehl zweimal direkt hintereinander ausführt.
Wie immer bitte ich um Kritik und Verbesserungsvorschläge zu diesem Script, bin echt kein Experte.
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
0
Ich hab das noch bißchen verändert.
Könnte man sicher eleganter lösen, aber so funktioniert es bei mir:

Rich (BBCode):
#!/bin/sh

LOGFILE=/var/log/shutdown.log
HOSTS="192.168.178.28"                                                                                    
log() {
        echo `date +%c`: $1 >> $LOGFILE
}
ONLINE=1
DOWNLOAD=1

for host in $HOSTS ; do                                                                                          
	if ! netstat | grep 'http' > /dev/null; then
		DOWNLOAD=0
	fi 
		if ! ping -c 3 -w 1 $host > /dev/null; then                                                             
			ONLINE=0
		fi   
done 


        if [ $ONLINE -eq 1 ] && [ $DOWNLOAD -eq 0 ]; then
                log "WDTV läuft!" 
						printf "\n" >> $LOGFILE
        fi
		
		if [ $DOWNLOAD -eq 1 ] && [ $ONLINE -eq 0 ]; then
                log "Download läuft!" 
						printf "\n" >> $LOGFILE
        fi
		
		if [ $DOWNLOAD -eq 1 ] && [ $ONLINE -eq 1 ]; then
                log "Download und WDTV laufen!" 
						printf "\n" >> $LOGFILE
        fi
		
		if [ $ONLINE -eq 0 ] && [ $DOWNLOAD -eq 0 ]; then
                log "Diskstation wird herunter gefahren!" 
						printf "\n" >> $LOGFILE
                /sbin/poweroff
        fi


Ich hab den Ping-Befehl benutzt weil der WDTV-Client nen Ping zurück liefert und netstat -n für die Abfrage ob ein Download läuft.

Somit ist zumindest rapidshare abgedeckt und das reicht (zumindest mir)!
 

coolhot

Benutzer
Mitglied seit
01. Mrz 2009
Beiträge
926
Punkte für Reaktionen
0
Punkte
0
Und wenn der Download nicht via http, sondern via ftp oder bt/emule erfolgt?
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
0
Naja, dazu muss das Script halt angepasst werden.

Aber Emule/FTP etc. interessiert mich nicht und so hab ich mit
meinen (wenigen) Möglichkeiten und meinem Wissen ein
funktionierendes Script gebastelt! :D

(der Großteil stammt natürlich aus diesem Thread, aber ich
hab's für meine Bedürfnisse angepasst und das freut mich)
 

ic167

Benutzer
Mitglied seit
04. Jan 2010
Beiträge
25
Punkte für Reaktionen
0
Punkte
0
So, hier nochmals eine abgeänderte Version nach Rücksprache mit maze.
Ähnelt sehr stark seinem Script, allerdings nochmals der Hinweis das dieses Script nur benötigt wird wenn man einen Client hat der nicht pingbar ist, in meinem Fall eine Xbox 360. Hat man z.B. einen WDTV Client sollte man denke ich besser das Script von maze nehmen.
Vielen Dank nochmals an alle die mitgeholfen haben das Script zu erstellen!!


Rich (BBCode):
#!/bin/sh

LOGFILE=/var/log/shutdown.log

log() {
        echo `date +%c :` $1 >> $LOGFILE
}
	DOWNLOAD=1 
	ONLINE=1

XBOXIP=192.168.0.110
if ! netstat -n | grep $XBOXIP'.*ESTABLISHED' > /dev/null; then
	ONLINE=0	
fi		

if ! netstat | grep 'http' > /dev/null; then
	DOWNLOAD=0
fi


if [ $ONLINE -eq 1 ] && [ $DOWNLOAD -eq 0 ] ; then
	log "XBOX läuft!"
					printf "\n" >> $LOGFILE
fi

if [ $DOWNLOAD -eq 1 ] && [ $ONLINE -eq 0 ]; then
    log "Download läuft!" 
					printf "\n" >> $LOGFILE
fi

if [ $DOWNLOAD -eq 1 ] && [ $ONLINE -eq 1 ]; then
                log "Download und XBOX laufen!" 
						printf "\n" >> $LOGFILE
fi
		
if [ $ONLINE -eq 0 ] && [ $DOWNLOAD -eq 0 ]; then
                log "Diskstation wird heruntergefahren!" 
						printf "\n" >> $LOGFILE
                /sbin/poweroff
fi
 

Anhänge

  • customshutdownxbox360.txt
    802 Bytes · Aufrufe: 12

gustel

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

sorry das ich das Thema noch einmal auspacke.
Kann mir jemand einen Link bzw. kurz erklären wie ich ein Script oder Cron-jop/tab auf die DS kopiere und zum laufen bringe.:eek:
Ich lese mich jetzt schon einige Zeit durch das Forum aber irgendwie finde ich keine Anleitung dazu (oder ich sehe den Wald vor lauter Bäumen nicht).
Leider kenne ich mich mit Linux und Co gar nicht aus.

Danke

PS: MySQL und IPKG habe ich installiert bekommen :D
 
Zuletzt bearbeitet:

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
0
MySQL brauchst du nicht wirklich.

Du brauchst zwingend:

- Telnet Zugang zur DS

Ganz nett wäre noch folgendes:

- root gemountet, so dass du per Filestation/FTP drauf zugreifen kannst
- Cronjobs (3rd-Party-Application von itari) incl. init_3rdparty.spk Paket

Ich erklär dir mal die komplette Version, da das einfacher ist und auch komfortabler für nachfolgende Veränderungen.

Du installiert init_3rdparty.spk und Cronjobs.spk (in dieser Reihenfolge).

Dann mountest du root z.B. so:

Rich (BBCode):
/bin/mount -o bind / /volume1/root/

Das musst du per Telnet eingeben und vorher den Ordner root im Hauptverzeichnis z.B. durch die Filestation erstellen.
Dieser Befehl mountet (verknüpft) das root-Verzeichnis, auf das du in der Filestation keinen Zugriff hast auf Volume1.

Du kannst auch direkt ein Script machen, das beim Start ausgeführt wird:

Rich (BBCode):
#!/bin/sh
case $1 in
start)
       /bin/mount -o bind / /volume1/root/
        ;;
stop)
       /bin/umount /volume1/root/
        ;;
*)
        echo "Usages: $0 [start|stop]"
        ;;
esac

Dieses script speicherst du einfach unter /usr/syno/etc.defaults/rc.d
Damit wird es dann beim Start automatisch ausgeführt.

Wichtig ist, dass du die Script unter Windows nicht einfach mit dem Editor bearbeiten kannst, du brauchst Notepad++ (Freeware).
Da dann unter Bearbeiten - Zeilenende auf Konvertiere zu UNIX (LF) umstellen und als IRGENDWAS.sh abspeichern und in den angegeben Ordner kopieren.

Danach suchst du dir eins der geposteten Scripts aus (sind ja jetzt hier einige Versionen gepostet worden) und speicherst es auch in Notepad++ wie beschrieben ab.

Dann kopierst du es z.B. in /usr/bin und installierst init_3rparty.spk und Cronjobs. Dann per Telnet einloggen (immer mit root und admin-Passwort) und jeweils in den Ordner wechseln, in den du die Scripte kopiert hast:

Mit cd .. kommst du eine Ebene höher und mit CD ORDNERNAME in das entsprechende Verzeichnis. Das musst du dann wie gesagt für beide Scripte machen und jeweils chmod +x SCRIPTNAME.sh eingeben.
Damit machst du das Script ausführbar.

Dann in Cronjobs (unter 3rd-Party-Apps auf der DS) einen "Job" eintragen (vergleichbar mit dem Taskmanager unter windows). Das läuft folgendermaßen ab:

Du siehst dort diverse Felder, die so aufgebaut sind:

1. Feld: Minute
2. Feld: Stunde
3. Feld: Tag im Monat
4. Feld: Monat
5. Feld: Wochentag
6. Benutzer
7. Pfad

Also müsste das z.B. so aussehen:

*/20 3-8 * * *root /usr/bin/SCRIPTNAME.sh

Dann auf save & restart klicken.

Damit wird das Script alle 20 min zwischen 3 und 8 Uhr ausgeführt, also das erste mal um 3 und das letzte Mal um 8:40 Uhr.
Benutzer ist immer root und der Pfad entsprechendem dem wo du das Script zum runterfahren abgelegt hast.

Das sollte es so in etwas sein, falls ich was vergessen hab meld dich einfach!
 

gustel

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

erst einmal vielen Danke für deine Bemühungen. :D

init_3rdparty.spk und Cronjobs.spk sind installiert.
Das Script :
#!/bin/sh
case $1 in
start)
/bin/mount -o bind / /volume1/root/
;;
stop)
/bin/umount /volume1/root/
;;
*)
echo "Usages: $0 [start|stop]"
;;
esac


habe ich im Ordner root den ich im DS- Manager unter gemeinsame Ordner erstellt habe unter mount_root.sh mit Notepad++ gespeichert.
(in der Filestation konnte ich keinen Ordner erstellen bzw. nur in einem schon vorhandenen Ordner)
Wie kopiere ich nun die Datei in den */usr/syno/etc.defaults/rc.d* Ordner?
Unter telnet root habe ich mich angemeldet aber ich komme auch nicht in den neu erstellten Ordner root. Ich lande immer wieder im Ordner wenn ich mich unter Telnet anmelde. :mad:
 

gustel

Benutzer
Mitglied seit
30. Dez 2009
Beiträge
68
Punkte für Reaktionen
0
Punkte
0
er bringt die Meldung fehlgeschlagen : erfolgreich???

Das kommische ist, ich bin im Ordner Volume1 wie man sieht ist auch der Ordner root zu sehen?
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    43 KB · Aufrufe: 297
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
7
Punkte
0
Dem Mount fehlt eine Leerstelle und ein / ist am Ende zu viel:

mount -o bind /(leerstelle)/volume1/root

Itari
 

gustel

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

danke ich glaube jetzt hat es funktioniert, er brachte auf jeden Fall keinen Fehler. Aber ich komme immer noch nicht in das root Verzeichnis bzw. in keinen Ordner unter Volume1 :mad:


Und dann stehe ich noch vor dem großen Kopierproblem. Wie kopiere ich unter telnet eine *.sh Datei in den jeweiligen Pfad? Kann ich die Datei wie unter Windows, in eine Zwischenablage kopieren und dann zum jeweiligen Ordner z.B. /usr/syno/etc.defaults/rc.d wechseln und dann wieder einfügen? Wobei ich gerade gemerkt habe, dass ich auch nicht in das Verzeichnis /usr/syno/etc.defaults/rc.d komme weil mir die Berechtigung fehlt.:mad:

Vielen Dank noch einmal für eure Hilfe, ich kann mir gut vorstellen das es für die die sich auskennen etwas nervig ist aber ich komme alleine leider nicht weiter.
 

gustel

Benutzer
Mitglied seit
30. Dez 2009
Beiträge
68
Punkte für Reaktionen
0
Punkte
0
ja, ich habe erst den root Ordner mit dem DS-Manager erstellt.:confused:
 

gustel

Benutzer
Mitglied seit
30. Dez 2009
Beiträge
68
Punkte für Reaktionen
0
Punkte
0
ok, ich komme doch in das /usr/syno/etc.defaults/rc.d Verzeichnis.
Ich habe cd vergessen :rolleyes:
 

gustel

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

Ich habe immer noch das Kopierproblem.
Ich sehe jetzt unter Windows die Ordner auf root aber ich kann nichts einfügen weil mir die Berechtigungen fehlen. Ich bin auf meinem NB als Admin angemeldet und habe mir im DSM die Berechtignungen für root gegeben.
Wenn ich es unter Telnet mit
*cp /sourceDirectory/sourceFile /destination*
versuche, geht es auch nicht.:mad:

Hat noch jemand einen Tipp.:eek:
 

Anhänge

  • kopieren.PNG
    kopieren.PNG
    10,1 KB · Aufrufe: 285