DS herunterfahren wenn kein Client mehr vorhanden

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
ich habe aber arp nicht auf der DS gefunden

Rich (BBCode):
ds2411> cat /proc/net/arp
IP address       HW type     Flags       HW address            Mask     Device
192.168.2.80     0x1         0x2         00:11:32:03:79:7b     *        eth0
192.168.2.4      0x1         0x2         c8:0a:a9:15:81:0e     *        eth0
192.168.2.7      0x1         0x2         c8:0a:a9:5e:ce:4f     *        eth0
192.168.2.8      0x1         0x2         00:50:8d:bf:8f:73     *        eth0
192.168.2.3      0x1         0x2         00:1d:72:e3:65:83     *        eth0

Itari
 

zelle

Benutzer
Mitglied seit
25. Aug 2010
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Rich (BBCode):
ds2411> cat /proc/net/arp
IP address       HW type     Flags       HW address            Mask     Device
192.168.2.80     0x1         0x2         00:11:32:03:79:7b     *        eth0
192.168.2.4      0x1         0x2         c8:0a:a9:15:81:0e     *        eth0
192.168.2.7      0x1         0x2         c8:0a:a9:5e:ce:4f     *        eth0
192.168.2.8      0x1         0x2         00:50:8d:bf:8f:73     *        eth0
192.168.2.3      0x1         0x2         00:1d:72:e3:65:83     *        eth0

Itari

Klar Mensch, /proc. Da hätte ich auch drauf kommen können!

Dank dir.
Zelle
 

bke15

Benutzer
Mitglied seit
29. Jan 2012
Beiträge
1
Punkte für Reaktionen
0
Punkte
0
Shutdown

Hi,

ich habe nochmals die Idee mit dem netstat aufgegriffen und ein simples Script gemacht. Ping finde ich unpraktisch, da möglicherweise ein Telefon zwar im Netz ist, aber nicht auf die Musik zugreift.
Das Script deckt schon alle Filezugriffe ab. Wenn jemand auf die Musik via APP zugreift, dann finde ich derzeit keine Möglichkeit das zu sehen. Netstat sieht den Zugriff nicht. Wie kann ich also rausfinden, ob eine APP z.B. "DS audio" auf die Diskstation zugreift?

Rich (BBCode):
#/bin/bash

maxcount=5
count=0

while true; do
        netstat -n | grep ESTABLISHED | grep -v "::"
        connectionsCount=`netstat -n | grep ESTABLISHED | grep -v "::" | wc -l`

        if [ $connectionsCount == 0 ]; then
                echo count:$count
                count=`expr ${count} + 1`
                if [ $count == $maxcount ]; then
                        echo "poweroff"
                        poweroff
                fi
        else
                echo Connections:$connectionsCount
                count=0
        fi
        sleep 60
done;

ich wäre für Ideen sehr dankbar.
 

ramseier

Benutzer
Mitglied seit
25. Dez 2011
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Rich (BBCode):
LOGFILE=/volume1/xxxxx/yyyyy.zzz

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

so binde ich mein log ein, klar
aber jetzt zu meiner frage, wie kann ich in den DATEINAMEN das aktuelle datum einbinden um quasi
täglich ein eignes log zu haben ?

mfg
ramseier
 

ramseier

Benutzer
Mitglied seit
25. Dez 2011
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
keiner ne idee ?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
genauso, wie du es im 'echo' gemacht hast: LOGFILE=/volume1/xxxxx/`date +%c`.zzz

Itari
 

ramseier

Benutzer
Mitglied seit
25. Dez 2011
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
danke, so einfach habe ich es mir nicht vorgestellt
manchmal sieht man den wald vor lauter bäumen nicht
 

basti122303

Benutzer
Mitglied seit
23. Jan 2012
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Automatischer Shutdown als Hibernate wrapper?

Hallo ich finde den Ansatz ganz gut.
Allerdings finde ich dies etwas unvorteilhaft, gerade wenn man die ds noch mit anderen dingen beschäft.

Hat jemand Informationen wie die ds den "hibernate" aufruft?
Vielleicht liese sich damit eine art wrapper realisieren der die ds runter fährt anstatt diese in den hibernate zu versetzen?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Hat jemand Informationen wie die ds den "hibernate" aufruft?

soweit ich es verfolgt habe, erledigt das der Plattencontroller autonom und die DS weiß nicht wirklich etwas davon ... es scheint allerdings im DSM 4.0 Beta auch einen Timer im Kernel zu geben ... kannst ja selbst auf die Suche gehen: 'grep hiber /usr/syno/bin/*' und 'grep hiber /usr/syno/sbin/*'

Itari
 

basti122303

Benutzer
Mitglied seit
23. Jan 2012
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Ich hab das zwar jetzt mit DSM 4.0 Beta versucht, doch überlebt da ein
Code:
 syno_hibernate_debug_tool --enable 1
keinen Reboot.

Also downgrade zu 3.2.
Code:
DS212> uname -a
Linux DS212 2.6.32.12 #1955 Sat Nov 26 14:50:54 CST 2011 armv5tel GNU/Linux synology_88f6281_212j
DS212>

EDIT:
Auch in der DSM 3.2 scheint syno_hibernate_debug_tool den Reboot nicht zu überleben, lässt sich aber beim boot starten
/usr/local/etc/rc.d/S99zhibernate.sh
Code:
#!/bin/sh
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
# enable hibernate_debug on statup
case "$1" in
'start')
   syno_hibernate_debug_tool --enable 1
   ;;

'stop')
   ;;

esac
exit

/var/log/messages in Verbindung mit Hibernate
Code:
[/etc/localtime] opened by pid 3436 [u:(/usr/syno/bin/scemd), comm:(scemd)]

also hab ich mir zwei scripte gebastelt, was /var/log/messages auf den obrigen eintrag prüft
(die PID es Prozesses scheint zwar immer gleich zu sein, sicherheitshalber wird diese aber mittels ps ermittelt )
das zweite ist ein wrapper der als Start-script dient

/usr/local/etc/rc.d/S99zshutdown
Code:
#/bin/sh
# shutdown wrapper
# watch /var/log/messages if device switch to hibernate
# [/etc/localtime] opened by pid 3436 [u:(/usr/syno/bin/scemd), comm:(scemd)] <-- after this log entry DS do hibernate

logfile="/var/log/messages"
myPID=`ps -w | grep -v grep | grep /usr/syno/bin/scemd | cut -d" " -f 2`
seachPattern="[/etc/localtime] opened by pid $myPID [u:(/usr/syno/bin/scemd), comm:(scemd)]"

touch /opt/hibernate/start_`date +%Y%m%d_%H%M%S` #DEBUG

tail -f -n0 $logfile | while read line; do
   var1=`echo $line | cut -d" " -f 7,8,9,10,11,12,13`
   if [ "$var1" = "$seachPattern" ]; then

      touch /opt/hibernate/halt_`date +%Y%m%d_%H%M%S` #DEBUG

      sleep 60
      #poweroff #DEBUG
   fi
done

/usr/local/etc/rc.d/S99zshutdown.sh
Code:
#!/bin/sh
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
# Script to start shutdown wrapper (/usr/local/etc/rc.d/S99zshutdown)

case "$1" in
'start')
   sh /usr/local/etc/rc.d/S99zshutdown &
   ;;
'stop')
   ;;
*)
   echo "usage: $0 start | stop"

esac
exit
 
Zuletzt bearbeitet:

hewo2012

Benutzer
Mitglied seit
04. Mrz 2012
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hallo liebe Leute!

ich stehe kurz davor, mir eine USB-Station 2 zu holen (als mein erstes Synology-Gerät). Lassen sich darauf auch die Linuxscripte ausführen? Insbesondere sollte das Gerät, wie in diesem Posting besprochen, runterfahren, wenn keine Clients mehr im Netzwerk da sind. Die USB-Station ist ja leider im Funktionsumfang etwas kleiner ausgestattet (der Webserver würde mir fehlen), aber kann ich trotzdem (ohne große Modifikationen) ein solches automatisches Shutdown-Script einbinden? Linuxkenntnisse sind grundsätzlich vorhanden.

VG und vielen Dank

hewo2012
 

Daniel775

Benutzer
Mitglied seit
01. Okt 2008
Beiträge
62
Punkte für Reaktionen
0
Punkte
0
Wie wäre es mit smbstatus?

Rich (BBCode):
#!/bin/bash
# Variablendeklaration
DEBUG=1;
doPowerOff=0;
line='';
str='';
strl='';
client='';
clientcnt=0;
#
/usr/syno/bin/smbstatus > smbstat;
while
read line; do
	if [ "$line" == "" ]; then
		echo
	elif [ "$line" == "No locked files" ]; then
		doPowerOff=1;
	elif [ "$line" == "Locked files:" ]; then
		break;
	else
		let clientcnt++;
		client=$(echo $line | awk '{ print $4 }' | cut -d "(" -f2 | sed 's/)//');
		str=${client}", ";
		strl=${strl}${str};
		# Wenn einer dieser Clients noch zugreift, dann trotzdem abschalten.
		case "$client" in
			"192.168.1.1") doPowerOff=1;;
		esac
	fi;

done < smbstat;
rm smbstat;

if [ $DEBUG -eq 1 ]; then
	echo $(date +"%d.%m.%y %H:%M") doPowerOff = $doPowerOff >> DEBUG.txt;
fi

# Es sind noch Clients online
if [ $clientcnt -eq 1 ]; then
	echo $(date +"%d.%m.%y %H:%M") \
	"Client" ${strl:0:${#strl}-2} noch Online \
	>> shutdown.log
else
	echo $(date +"%d.%m.%y %H:%M") \
	"Clients" ${strl:0:${#strl}-2} noch Online \
	>> shutdown.log
fi

if [ $doPowerOff -eq 1 ]; then
	killall -9 smbd;
	killall -9 nmbd;
	echo $(date +"%d.%m.%y %H:%M") Keine Clients mehr online - shutdown \
			>> shutdown.log;
	/sbin/poweroff;
fi

exit 0;
 

hewo2012

Benutzer
Mitglied seit
04. Mrz 2012
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hi Daniel775,

vielen Dank für das Script. Weißt du, ob ich mich auch bei der USB-Station 2 per SSH oder Telnet einloggen kann, um ein solches Script zu installieren?

Viele Grüße
hewo2012
 

Daniel775

Benutzer
Mitglied seit
01. Okt 2008
Beiträge
62
Punkte für Reaktionen
0
Punkte
0
Hallo hewo2012,

ich kenne die USB-Station 2 nicht. Es sollte aber kein Problem sein das Script ins laufen zu bekommen.

...Weißt du, ob ich mich auch bei der USB-Station 2 per SSH oder Telnet einloggen kann...

Melde dich mit deinen Browser an die Box an (DSM). http://[Ip_Adresse_deiner_Box]:5000 und schau unter „Systemsteuerung – Terminal“. Dort sollte man SSH und Telnet aktivieren können.

Als nächstes solltest du ipkg installieren. Angeblich sollst du lt. Google ein Installationskript unter "/volume1" finden. Also mit SSH oder Telnet anmelden. Dann in das Verzeichnis /volume1 wechseln mit "cd /volume1" und dann mit "./install-ipkg" ausführen. Nach der Installation des Paketmanagers (ipkg) solltest du "ipkg update" aufrufen um den Paketmanager zu aktualisieren.

Dann vergewissere dich, ob du Crond bei dir läuft. Mit "ps | grep crond" erfährst du dies. Crond brauchst du, um in Regelmäßigen abständen das Skript ablaufen zu lassen. Wenn Crond nicht installiert ist, dann gib mal "ipkg install crond" ein. Vielleicht gibt es das für die USB-Station2 schon als ipkg Paket.

Grüße

daniel775
 

hewo2012

Benutzer
Mitglied seit
04. Mrz 2012
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hallo Daniel775,

vielen Dank für deine ausführliche Erklärung! habe grade noch einen anderen Beitrag gefunden: www.synology-forum.de/showthread.html?25152-IPKG-und-pyLoad-auf-der-USB-Station-2 demnach würde das ipkg nur mit einer alternativen Firmware funktionieren. Das wäre mir dann zum einen zu viel Bastelei (dann kann ich so ein Gerät auch gleich selbst aufsetzen ;) ) und zum anderen vermutlich auch nicht im Sinne des Herstellers (-> Support).

Viele Grüße
hewo2012
 

tomas123

Benutzer
Mitglied seit
06. Mrz 2012
Beiträge
99
Punkte für Reaktionen
0
Punkte
0
ich werf hier noch einen anderen Ansatz in die Runde

die Kollegen von WD schalten ihre Festplatten im NAS aus, indem sie mit einem Script ständig die iostasts des Kernels beobachten
d.h. cat /proc/diskstats
hier die Doku zu den Feldern: http://www.kernel.org/doc/Documentation/iostats.txt

Werden innerhalb einer gewissen Zeit keine (Lese/Schreib)-Zugriffe der Festplatte festgestellt, dann wird in dem Script die Festplatte mit
/usr/sbin/hdparm -y /dev/sd?
abgeschaltet. An dieser Stelle kann auch ein Shutdown durchgeführt werden.

ich habe mal das WD-Script für ein bis zwei Festplatten kopiert:
Die Variable SLEEPMIN ist hier der TimeOut in Minuten
cat /etc/model dient bei WD zur Ermittlung der Anzahl der Festplatten

Rich (BBCode):
#!/bin/sh

SLEEPMIN=10

#Determine which model (1NC/2NC) we are running on.
MODEL=`/bin/cat /etc/model`
if [ "$MODEL" == "WWLXN" ];then
        MODEL="1NC"
else
        MODEL="2NC"
fi

while :; do

    /usr/sbin/hdparm -C /dev/sda | /bin/grep standby >/dev/null
    if [ "$?" -ne "0" ]; then

        # Write datetime to default RTC file
        /bin/date +%Y%m%d%H%M > /etc/.defaultRTC
        /bin/sync
        /bin/sleep 3

        sleepcount=0
        iow=`/bin/cat /proc/diskstats | /bin/grep -E 'sda ' | /usr/bin/cut -d' ' -f16`
        ior=`/bin/cat /proc/diskstats | /bin/grep -E 'sda4' | /usr/bin/cut -d' ' -f10`
        [ -z "$ior" ] && ior=0
        io=`/usr/bin/expr $iow + $ior`
        if [ "$MODEL" == "2NC" ];then
                ior=`/bin/cat /proc/diskstats | /bin/grep -E 'sdb4' | /usr/bin/cut -d' ' -f10`
                [ -z "$ior" ] && ior=0
                io=`/usr/bin/expr $io + $ior`
        fi
        while :; do
                # Wait for 60 seconds
                /bin/sleep 60
                iow=`/bin/cat /proc/diskstats | /bin/grep -E 'sda ' | /usr/bin/cut -d' ' -f16`
                ior=`/bin/cat /proc/diskstats | /bin/grep -E 'sda4' | /usr/bin/cut -d' ' -f10`
                [ -z "$ior" ] && ior=0
                io2=`/usr/bin/expr $iow + $ior`
                if [ "$MODEL" == "2NC" ];then
                        ior=`/bin/cat /proc/diskstats | /bin/grep -E 'sdb4' | /usr/bin/cut -d' ' -f10`
                        [ -z "$ior" ] && ior=0
                        io2=`/usr/bin/expr $io2 + $ior`
                fi
                if [ "$io" -eq "$io2" ]; then
                        sleepcount=$((sleepcount+1))
                else
                        sleepcount=0
                        io=$io2
                fi
                if [ "$sleepcount" -eq "$SLEEPMIN" ]; then
                        /usr/sbin/hdparm -y /dev/sda >/dev/null
                        if [ "$MODEL" == "2NC" ];then
                                /usr/sbin/hdparm -y /dev/sdb >/dev/null
                        fi
                        break
                fi
        done

    fi
    /bin/sleep 60

done

Der Witz dieser Lösung ist, dass nur der Kernel beobachtet wird. Keine Prozesse etc. Entscheidend ist nur was hinten an der Festplatte ankommt (nach dem swap etc.)
Setzt man SLEEPMIN auf einem Wert von 30 oder 60 Minuten, dann dürfte im LAN auch Ruhe sein.
 
Zuletzt bearbeitet:

tomas123

Benutzer
Mitglied seit
06. Mrz 2012
Beiträge
99
Punkte für Reaktionen
0
Punkte
0
ich habe das mal auf einer DS212+ getestet

Rich (BBCode):
> while [ 1 ] ; do /bin/cat /proc/diskstats | /bin/grep -E 'sda ' | awk '{ print $4"  "$6"  "$8"  "$10}' ; sleep 10 ; done
2177  232296  2703  40928
2177  232296  2709  40992
2177  232296  2709  40992
2177  232296  2709  40992

zeigt folgende Felder an
http://www.kernel.org/doc/Documentation/iostats.txt
Field 1 -- # of reads completed
This is the total number of reads completed successfully.

Field 3 -- # of sectors read
This is the total number of sectors read successfully.

Field 5 -- # of writes completed
This is the total number of writes completed successfully.

Field 7 -- # of sectors written
This is the total number of sectors written successfully.

da sieht man schnell ob noch Festplattenzugriffe stattfinden
 

klemi

Benutzer
Mitglied seit
24. Okt 2008
Beiträge
76
Punkte für Reaktionen
0
Punkte
0
Also ich habe den DS Finder auf meinem ipod touch geladen.

Leider kann man nicht in den Ruhemodus schalten - sondern nur "AUS" und "AN". Bis die Station dann im ipod touch per WOL als "EIN" erkannt wird dauert halt ca. 75 sec. - ziemlich lange halt, wenn man mal gerade Musik von der NAS hören möchte.
Würde dieses Feature gerne nur benutzen, wenn ich mal einige Tage gar nicht im Hause bin - Urlaub etc.
Passt vielleicht nicht so ganz ins Themenumfeld - aber ich möchte eigentlich mit der DS 212+ ja das gleiche bewirken wie hier im Thread beschrieben.

Ich würde mich freuen über die Beantwortung von fogenden Fragen:

1)Wie groß ist eigentlich bei der DS 212+ der Leistungsverbrauch zwischen "Ruhemodus" und "AUS"?
2)Und nach welcher Zeit geht die DS 212+ in den Ruhemodus, wenn keine ZUgriffs-Aktivitäten auf die DS sind?

3)Hat sich jetzt eigentlich das Problem mit externen SATA-Platten bewahrheit unter DSM 4 - oder habven die keinen Einfluss auf das Umschalten in den Ruhemodus mehr?

Gruß

Klemi
 

Moaddin

Benutzer
Mitglied seit
29. Dez 2011
Beiträge
29
Punkte für Reaktionen
0
Punkte
0
Mit Wake on LAN eingeschaltet ist der Stromverbrauch im ausgeschalteten Zustand bei etwas über 1W und ohne Wake on LAN ist er etwas unter 1W.
 


 

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