DS herunterfahren wenn kein Client mehr vorhanden

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
ok, ich denke ich weiß was du willst.

Setzt mich heute nachmittag mal hin.

Ich denke es geht über die CPU-Last oder Disk I/O.
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
So, ich hab nun einen Lösungsvorschlag.

Code:
if (ps aux | grep ntfs-3g | grep R | grep -v grep) ; then

Hier wird schon nach ntfs-3g gefiltert, aber es gibt ja STAT-Eigenschaften (R = Running;S=sleeping)

Ich weiß allerdings nicht wie man speziell die Spalte STAT abfragen kann über grep. Habe $STAT versuch aber ohne positiven Ergebnis. Vielleicht kennt sich da jemand besser aus.

Ich habs ein paar mal getestet. Funktioniert, allerdings kam es auch vor, dass der Dienst in den S-Modus gegangen ist wärend er kopiert hat (Verbindung, Nachdenken, etc). D.h. Du musst dies 2 oder 3x abprüfen bevor der shutdown passiert (sleep 5 oder so).

Probiers mal.

grep, ähhhh gruß
Brainwolf
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Und hier nochmal im Ganze:

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 
	exit
fi

if (ps aux | grep ntfs-3g | grep -v grep | grep R); then
	BACKUP=1
	log "Kopiervorgang läuft!" 	printf "\n" >> $LOGFILE
	exit
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
	sleep 120
	log "2. PING Versuch!"			printf "\n" >> $LOGFILE 
	 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
 

maze128

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

danke für deine Mühe, das Problem ist, dass der Dienst teilweise nicht beendet wird. Bzw. in sleep geht und auch nur genutzt wird wenn du etwas auf/von USB kopierst, wenn man was auf der DS kopiert/Verschiebt fällt diese Möglichkeit daher flach.

Aber ist schonmal besser als nix, dank dir auf jeden Fall!
 

Brainwolf

Benutzer
Mitglied seit
16. Aug 2010
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Naja, dann kommt darauf an, mit welchem Protokoll du auf die DS kopierst.

per cif ist es dann der Dienst smbd.

Aber ich denke nun kommst du selbst weiter.

Gruß
Brainwolf
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
Ja, das stimmt.
Ich stell das nur im Dateimanager an, von daher wird da cif wohl kaum auftauchen. Ich werds mal so probieren und schauen was die DS macht.

Dank auf jeden Fall!
 

coolhot

Benutzer
Mitglied seit
01. Mrz 2009
Beiträge
926
Punkte für Reaktionen
0
Punkte
0
Mal ne blöde Zwischenfrage: Warum ist der PC 24/7 an wenn du eine NAS hast. Wäre anders rum nicht sinnvoller? Also Services die 24/7 bereit stehen sollen die NAS erledigen lassen. Spart Strom und den Skriptproblem hätte sich auch erledigt. Den PC könntest du z.B. per WOL bei Bedarf wecken.
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
Der PC ist per Wlan verbunden, daher ist das mit WOL schlecht.
Ansonsten gibts genug Gründe dafür, dass er ständig läuft.

Surfen tagsüber, download nachts, diverse Dienste usw....
 

coolhot

Benutzer
Mitglied seit
01. Mrz 2009
Beiträge
926
Punkte für Reaktionen
0
Punkte
0
Muss ja jeder selbst wissen, sollte nur ein Denkanstoss sein. Vielleicht gelingts ja doch Last von PC in Richtung NAS zu verschieben. Download ist ja schonmal möglich. Und "Dienste" beherrscht die DS ja ne Menge, ggf. mit Hilfe von IPKG.
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
Also surfen kann ich mit dem Ding noch nicht ;-)
Der Download-Manager der DS ist ja nicht wirklich komfortabel und unterstützt auch nur sehr wenig Hoster und das entpacken dauert auf der DS auch ewig....
Dann lad ich lieber am PC, lass ihn direkt entpacken und schieb es dann in Ruhe auf die DS.
 

Myrddin

Benutzer
Mitglied seit
01. Aug 2010
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Etwas andere Anforderung

Hallo zusammen!

Ich will das hier wieder auf machen, nachdem man mich in einem anderen Thread hierher geschickt hat.

Dort habe ich meine Vision bereits formuliert. Es geht nochmal kurz zusammengefasst darum:

Meine DS soll von einem einem gestarteten Rechner automatisch geweckt werden. Sollte kein Rechner mehr laufen sollte auch die Diskstation wieder runter fahren. Soweit die hier geposteten Scripte ganz gut passend.
Jedoch hätte ich gerne eine deutliche Karenz bis zum Shutdown (ca. 2h). Das bedingt die Situation das ich meine Geräte sehr häufig in den Ruhezustand versetze bzw. diese das selber tun. Dadurch kann es schon mal passieren das für eine gewisse Zeit kein Gerät an ist. Die DS soll aber nicht ständig rauf und runter fahren, also nur bei längerer Inaktivität.

Die hier vorgestellten Skripte laufen alle über Cronjobs. Im anderen Thread gibt es den Ansatz das Skript dauern in einer Schleife laufen zu lassen. Ist davon grundsätzlich abzuraten? Mir würde diese Lösung besser gefallen. Mir gehts es da im Moment ein wenig wie dem Gustel, ich möchte da erstmal nicht so viel rumbauen müssen, spar ich mir den Cronjob müsste ich das Skript nur in den "Autostart"-Ordner packen und gut wäre. Das reduziert die Fehlerquellen meinerseits. :rolleyes:

Ich bin da leider wirklich blutiger Anfänger, selbst wenn ich den Code im Prinzip verstehe (hatte früher Batchs, VB, VBA zu tun). Würde jemand für mich das Skript entsprechen umbauen? Mir würde auch zunächst die reine PING-Abfrage mehrerer Geräte im Netz reichen. Wenn dann wie geplant UPNP-Renderer/Player dazu kommen wird es spannend ob man die pingen kann. Dann bin ich aber hoffentlich schon ein bischen bezüglich Kenntnissen fortgeschritten.

Gruß
Myrddin
 

serpentes

Benutzer
Mitglied seit
10. Sep 2010
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
mahlzeit.
ich habe da noch ein problem mit dem shutdown script...
in meinem netzwerk befinden sich 2 PCs. ich habe das problem, dass wenn ein PC aus ist, der 2. aber noch läuft, die DS regelmäßig herunterfährt, obwohl sie das ja noch nicht sollte.

meine recherche hat gezeigt, dass es an der Reihenfolge der Hosts im Script liegt.

in der log steht folgendes :
Rich (BBCode):
Sat Sep 11 23:11:42 2010 Versuche DS auszuschalten
Sat Sep 11 23:11:48 2010 2. PING Versuch!
Sat Sep 11 23:11:51 2010 Diskstation wird heruntergefahren!
Sat Sep 11 23:12:03 2010 192.168.0.22 ist online!

192.168.0.22 steht als 2. in der liste der hosts. setze ich den rechner an 1. stelle, läuft das script wie es soll... aber dann hätte ich das problem wenn der rechner aus ist, und der andre noch läuft. irgendwie kommt es bei dem script nicht richtig an dass mein pc aus ist, aber der ander noch an ist...

hat jemand ne idee dazu?
 

Myrddin

Benutzer
Mitglied seit
01. Aug 2010
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Ich hab mich nun mal bischen in die Syntax eingelesen und auf Grundlage des einfachen Skripts aus dem anderen Thread folgendes gebastelt:

Rich (BBCode):
Zaehler=0
while expr $Zaehler \< 8; do # Anzahl Wiederholungen
RET1=$(ping -c 1 192.168.1.1 | tail -1 | awk '{print $7}')
RET2=$(ping -c 1 192.168.1.2 | tail -1 | awk '{print $7}')
if [ "$RET1" = "100%" -a "$RET2" = "100%" ] ; then Zaehler=`expr $Zaehler + 1` ; else Zaehler=0 ; fi
sleep 900 #Wartezeit zwischen den Pings in Sekunden
done
poweroff

Hat im Trockendock unter /usr/bin/ ganz gut funktioniert.Habe das Skript dann unter /usr/syno/etc/rc.d/ als S99zzautoshutdown.sh abgelegt und die DS neu gestartet.

War aber keine gute Idee. Die LED-Anzeige war dann irgendwie verkorkst, die blaue Power hat nicht mehr zum blinken aufgehört, HDD LEDs waren ganz aus. Kann mir jemand sagen wo mein Denkfehler ist? Irgendwie scheint die DS das Skript nicht zu mögen oder ist es der Dateiname (Reihenfolge)?

Gruß
Myrddin
 

coolhot

Benutzer
Mitglied seit
01. Mrz 2009
Beiträge
926
Punkte für Reaktionen
0
Punkte
0
Ich sehe keinen Zusammenhang zum beschriebenen Verhalten. Konntest du denn auf die DS normal zugreifen trotz der "LED-Verwirrung"?

Hast du schon mal versucht das Script woanders abzulegen und per cron zu starten?
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
Wenn ich mich nicht irre (was gut der Fall sein kann), könnte es daran liegen, dass er das Script einfach so lange abarbeitet bis es beendet wird.
Von daher wäre es besser es vielleicht mal manuell zu starten wenn die DS hoch gefahren ist und dann zu testen ob es weiter läuft.

Allerdings würde ich auch die Möglichkeit per Cron vorziehen, starte das Script doch einfach alle 20 Min, dann kannst du es mit der 3rd-Party-Erweiterung auch leichter deaktivieren wenn die DS mal laufen soll obwohl die Rechner aus sind.
 

Myrddin

Benutzer
Mitglied seit
01. Aug 2010
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Ein Schritt weiter

Erstmal danke für die schnelle Antwort Euch beiden. Habe nun endlich Zeit gefunden mal weiter zu machen.

Also das Skript selber scheint genau das zu tun was es solls. Zumindest wenn ich es im /usr/bin/ manuell starte.

Was mein Problem betrifft hat wohl Maze recht, ich habe das mal mit zwei einfachen Test-Skripten versucht. Lass ich per Autostart ein Skript laufen das nur ein Echo aus gibt fährt die DS normal hoch. Nehme ich jedoch ein Skript das ein Sleep enthält dauert es entsprechend länger bis alles normal läuft. Einloggen geht aber schon wärend die DS noch blinkt. Das dürfte dann wohl denn Effekt erklären das die DS irgendwie hängen bleibt wenn mein Skript in einer ewigen Schleife läuft. Komisch nur dass das von Itari im anderen Thread so vorgeschlagen wurde wenn das garnicht funktionieren kann. :confused:

Ich wollte eigentlich erstmal so wenig wie möglich an der DS rumbasteln. Wenn ich die Anleitung hier lese wegen Cronjob mit Installation des Paketmanagers usw. mach ich mir eher sorgen mehr kaputt zu machen. Vor allem wie realisiere ich dann das zählen? Immerhin soll der Poweroff nicht durch eine einzelne Momentaufnahme ausgelöst werden sondern durch eine längere Inaktivität.

Das Skript müsse vermutlich als eigener Prozess gestartet werden damit es nicht das hochfahren der DS blockiert. Liest vieleicht jemand mit der weiß wie das gehen könnte?

Gruß
Myrddin
 

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
Ich hab bei meiner NAS schon seit bald nem Jahr ein solches Skript über CronJob am laufen.

Jeden Abend um [Cronjob]-Uhr wird das Skript alle [Cronjob]-Minuten gestartet.
Das Skript läuft dann in einem eigenen Prozess und pingt alle meine Systeme an.
Ich habe auch eine zweite Abfrage nach 5 Minuten drin. Wenn dann immer noch keiner da ist, dann fährt das System runter. Du müsstest halt dann die 5 Minuten auf 120 hochsetzen und gut ist.

Cronjob ist jetzt kein Hexenwerk. (Hab ich auch erst nach dem Ersten mal probieren festgestellt ;) )

Gruß
Ralf

Link zu meinem Skript: http://www.synology-forum.de/showpost.html?p=92909&postcount=13
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Das Skript müsse vermutlich als eigener Prozess gestartet werden damit es nicht das hochfahren der DS blockiert. Liest vieleicht jemand mit der weiß wie das gehen könnte?

Wenn das Skript aus dem /usr/syno/etc/rc.d - Verzeichnis heraus gestartet wird und sich selbst in den Hintergrund schiebt, dann sollte es eigentlich nichts blockieren.

Angenommen dein Skript heisst: /usr/bin/mysystemdown.sh, dann kannst eine Skriptdatei /usr/syno/etc/rc.d/S99mydown.sh schreiben:

Rich (BBCode):
#!/bin/sh
$F="/usr/bin/mysystemdown.sh"
case "$1" in
start)
if [ -x "$F" ] ; then 
 $F & 
fi
;;
esac

Das '&' schiebt es in den Hintergrund (nicht blockierend). Alle Leerstellen sind Absicht. Es muss mit einem Linux-Zeilenenden-Editor erfasst werden.

Selbstverständlich ist auch eine crond-Lösung möglich.

Itari
 

coolhot

Benutzer
Mitglied seit
01. Mrz 2009
Beiträge
926
Punkte für Reaktionen
0
Punkte
0
Für crond ist keine Extra-Installation notwendig. Du kannst direkt die Datei /etc/crontab bearbeiten.
 


 

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