# Linux Skript für automatischen Shutdown



## PrincePaul (18. Juli 2012)

*Linux Skript für automatischen Shutdown*

Hallo Leute,

evtl. haben es schon einige von euch mitbekommen
aber ich baue momentan ein Gehäuse für ein NAS mit FreeNas als OS
welches ja auf Linux basiert....

SOoo nun zum Problem:

ich möchte das mein NAS die Rechner bzw. TV´s im Netzwerk anpingt um festzustellen wann das NAS nichtmehr benötigt wird und dann letztendlich automatisch runterfährt
evtl habt ihr ja noch andere Ideen wie man das realisieren kann
wichtig ist nur das es nachdem alle im Netzwerk offline gegangen sind das NAS runterfährt.

Naja ich hab mir da mal folgende 2 Skripte rausgesucht:

*Skript 1:*


```
#!/bin/bash

_exit () {
case $1 in
1) echo "Kein Shutdown - Mindestens einer der PCs ist eingeschaltet" ;;
2) echo "Kein PC online - Shutdown in 60 Sekunden" ; shutdown -p +1 ;;
esac
exit $1;
}

# Checken ob PC1 oder PC2 oder TV1 oder TV2 an ist
# .31 PrincePaul-PC .22 Unser-PC-1 .21 TV .25 TV2
if [ `ping -c 5 -i 1 192.168.178.31 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ; fi
if [ `ping -c 5 -i 1 192.168.178.22 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ; fi
if [ `ping -c 5 -i 1 192.168.178.21 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ; fi
if [ `ping -c 5 -i 1 192.168.178.25 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ; fi

# Wenn kein PC an ist 3 mins warten falls gerade einer Neu startet
echo "Kein PC online - Warte 180 Sekunden"
sleep 180

# PCs nochmals checken
# Checken ob PC1 oder PC2 oder TV1 oder TV2 an ist
if [ `ping -c 5 -i 1 192.168.178.31 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ; fi
if [ `ping -c 5 -i 1 192.168.178.22 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ; fi
if [ `ping -c 5 -i 1 192.168.178.21 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ; fi
if [ `ping -c 5 -i 1 192.168.178.25 | grep -wc 100.0%` -eq 0 ] ; then _exit 1 ; fi


# Falls keiner der PCs online war herunterfahren
_exit 2
```



*Skript 2:*


```
#!/bin/bash

HOST1=192.168.178.31 #PC
HOST2=192.168.178.22 #PC2
HOST3=192.168.178.21 #TV
HOST4=192.168.178.25 #TV2
HOST5=192.168.178.23 #Laptop

_exit () {
case $1 in
1) echo "Kein Shutdown - Mindestens einer der PCs ist eingeschaltet" ;;
2) echo "Kein PC online - Shutdown" ; shutdown -p now ;;
esac
exit $1;
}

# Checken ob PC's an sind
if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1;
# Wenn kein PC an ist, gehe zu Checken ob PC's im IP-Bereich an sind
else

# Checken ob PC's im IP-Bereich an sind
ip=192.168.178. #Netzadresse des eigenen Netzwerkes ohne den Hostanteil
i=21 #checke Netz ab Hostanteil 21
while [ $i -le 35 ] #checke Netz bis Hostanteil 35
do
ping -c 1 -i 1 $ip$i #ping mit der zusammengesetzten IP-Adresse aus den o.a. Variablen "ip" und "i"
if [ `ping -c 1 -i 1 $ip$i | grep -wc 100.0%` -eq 0 ] #sobald einer der Hosts auf den ping antwortet, nicht herunterfahren
then _exit 1 #beenden mit exit 1 (kein shutdown)
fi
i=$(( $i+1 )) #erhöhe Hostanteil immer um 1
done

_exit 2 # hat kein PC geantwortet, shutdown
fi
```


*Fehler:*

Skript 1  *4: Syntax error: expecting "in"*
Skript 2  *7: Syntax error: expecting "in"*

Die Rechte der Dateien sind auf 755 und um die Datei zu erstellen hab ich PSPad genutzt bzw. Text Editor von Windows und dannach einfach die Endung von txt auf sh geändert
ging aber beides nicht


hoffe jemand kann mir helfen
Gruß
Paule


----------



## mattinator (18. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Quote mal den Parameter in der Case-Anweisung der _exit-Funktionen:

```
case [B][COLOR=red]"[/B]$1[COLOR=red][B]"[/B] in
```
Ansonsten am Anfang der Scripts mal eine Zeile mit set -x einfügen, dann lässt sich der Ablauf besser tracen.
Btw. würde ich nicht mit grep arbeiten sondern mit dem Rückgabewert von ping. Ein Paket reicht eigentlich auch zum Test der Verbindung und der Ping-Befehl erlaubt auch, die Größe der Pakete zu reduzieren.


----------



## PrincePaul (19. Juli 2012)

Alles klar werde das mal ausprobieren,
aber du musst wissen ich hab davon gar kein plan 

Also bis zum Set -x hab ich noch alles verstanden aber was meinst du mit nicht mit grep sondern der Ping Antwort arbeiten bzw.

Wie sieht das dann im Skript aus ... ich hab kein plan 

Bei der Paket Größe kann man ja dann das kleinste nehmen schont ja dann die Leitung.

Währe nett wenn du dir eins der beiden Skripte nimmst und das mal so änderst wie du das für richtig hältst


----------



## M4jestix (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Hi, habe bei mir so ziemlich die selbe Funktion - allerdings über einen Cronjob - eingerichtet. 

Da du ja auch hier nur eine Rückmeldung brauchst ob ein Gerät (PC, TV) läuft denk ich funktioniert das ganze mit "fping" wesentlich unkomplizierter. 

Hier mal mein Bashscript zum Suspend meines Servers:

#!/bin/bash

if fping 192.168.2.105 192.168.2.106 | grep -i alive 
then echo einer_is_aktiv
else /usr/sbin/pm-suspend
fi

Die beiden IP-Adressen werden abgefragt, fping liefert im Falle dessen dass einer läuft ein "alive" zurück was ich mit grep abfange. Zusätzlich könntest du dir eine Schleife einbauen falls du wie in deinem Script das sleep weiter nutzen willst. In meinem Fall wird das Script per cron alle 30 min ausgeführt. Auf einem anderen Linuxsystem habe ich noch ein Script zum aufwecken des Servers das nach dem selben Prinzip funktioniert... 

MfG


----------



## PrincePaul (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Sooo hab mir mal ein fertiges skript schon als sh Datei schicken lassen, dann per PSPad meine Ip´s eingetragen und es ging.

Keine Ahnung woran das lag.

Aber es wäre trotzdem noch gut wenn man die Paketgröße minimieren kann weils doch schon lange dauert bis er die ganzen Ip´s durchgecheckt hat

So siehts momentan aus:


```
#!/bin/bash

HOST1=192.168.0.31  #PC1
HOST2=192.168.0.23  #Laptop
HOST3=192.168.0.21  #TV1
HOST4=192.168.0.25  #TV2
HOST5=192.168.0.22  #PC2

_exit () {
   case $1 in
      1) echo "Kein Shutdown - Mindestens einer der PCs ist eingeschaltet" ;;
      2) echo "Kein PC online - Shutdown" ; shutdown -p now ;;
   esac
   exit $1;
}

# Checken ob PC's an sind
if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1;
# Wenn kein PC an ist, gehe zu Checken ob PC's im IP-Bereich an sind
else

# Checken ob PC's im IP-Bereich an sind
ip=192.168.0.                   #Netzadresse des eigenen Netzwerkes ohne den Hostanteil
i=21                            #checke Netz ab Hostanteil 21
while [ $i -le 40 ]             #checke Netz bis Hostanteil 40
        do
        ping -c 1 -i 1 $ip$i    #ping mit der zusammengesetzten IP-Adresse aus den o.a. Variablen "ip" und "i"
                if [ `ping -c 1 -i 1 $ip$i | grep -wc 100.0%` -eq 0 ]            #sobald einer der Hosts auf den ping antwortet, nicht herunterfahren
                then _exit 1    #beenden mit exit 1 (kein shutdown)
                fi
        i=$(( $i+1 ))           #erhöhe Hostanteil immer um 1
done

_exit 2                         # hat kein PC geantwortet, shutdown
fi
```

@M4jestix: so wie das skript jetzt ist wirds auch als cronjob ausgeführt und was ist der unterschied zwischen fping und normalem ping ?
oder meinst du das Programm ?


----------



## mattinator (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*



PrincePaul schrieb:


> Sooo hab mir mal ein fertiges skript schon als  sh Datei schicken lassen, dann per PSPad meine Ip´s eingetragen und es  ging.
> 
> Keine Ahnung woran das lag.


 
Hattest Du die Datei vorher mit einem Windows-Editor geschrieben ?



PrincePaul schrieb:


> Aber es wäre trotzdem  noch gut wenn man die Paketgröße minimieren kann weils doch schon lange  dauert bis er die ganzen Ip´s durchgecheckt hat


 
ping -c 1 -s 0 -W 0 -i 0


----------



## PrincePaul (19. Juli 2012)

Ja genau einmal mit Windows Editor und einmal direkt aus nem anderen Forum in PSPad reinkopiert.

Danke für den Befehl werd ich gleich mal ausprobieren, momentan teste ich gerade das andere Skript deshalb pc aus


----------



## Hatuja (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Nur mal so nebenbei:
Ich hatte das vor kurzem mal FreeNAS getestet und fand es nicht grad so toll. Außerdem hing sich mein NAS damit doch des öfteren auf (Kernel Panic ). Und als es dann beim einem Absturz den RAID Verbund löste und fast 3 Tage für einen rebuild brauchte, war die Sache mit FreeNAS gegessen. Wenn du also doch mal eine Alternative suchst, kann ich die OpenMediaVault empfehlen. Wird von eine deutschen entwickelt, der lange Zeit auch an FreeNAS bebaut hat. Konfiguration geht ist super schnell, ist einfach und läuft nun seit 2 Monaten stabil.


----------



## PrincePaul (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Ja das haben mir schon mehrere erzählt das sie Probleme mit FreeNas haben.

Ich persönlich bin völlig zufrieden damit hatte noch NIE Fehler oder Abstürze und seit der neusten Version funktioniert DLNA auch perfekt also ich kann da echt nicht meckern


----------



## mattinator (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*



PrincePaul schrieb:


> Ja genau einmal mit Windows Editor


 
Windows macht den Zeilenabschluss in Text-Dateien mit <CR><LF> (Binär 0x0D, 0x0A). Damit kommt die Linux-Shell nicht immer zurecht.


----------



## PrincePaul (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

ja dann wirds wohl daran gelegen haben.

Hab das mal mit ping -c 1 -s 0 -W 0 -i 0 ausprobiert anstatt ping -c 1 -i 1
ist aber leider auch nicht schneller.

Momentan funktioniert soweit aber alles 
Hab gerade mal den cron job eingerichtet
läuft auch ... zum Glück ohne Probleme


----------



## M4jestix (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Womit stellst du denn eine evtl Geschwindigkeitsänderung des ganzen fest?? Inwiefern sollte/muss es denn schneller gehn?


----------



## PrincePaul (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Um das Skript zu testen nehm ich Putty und führe das ganz einmal aus dann sehe ich ja die einzelnen Schritte.
Ansich ists egal wie lange das dauert, wichtig ist nur das das NAS am ende wenn keine Pc´s mehr an sind runter fährt.

Aber er fängt ja z.B. bei 192.168.178.21 an pingt die an
das dauert ja schon ne weile
dann geht er ein höher sprich auf 192.168.178.22 bis auf .40
das dauert ewig

Ich dachte durch die Paketverkleinerung ists anpingen zack nächste anpingen und so weiter
ich vermute mal das es so lange dauert weil er mehrmals versucht die gleiche IP anzupingen bevor er es aufgibt (weil der pc ja aus ist) und dann erst zur nächsten übergeht.

denn wenn das NAS eine IP anpingt die auch ne Rückmeldung gibt also von einem PC der an ist, erkennt er das sofort und es geht auch sofort weiter


Kann das sein ?


----------



## M4jestix (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Wenn dir der normale ping-Befehl wie du schreibst evtl. zu "langsam" ist teste doch mal das von mir vorgeschlagene "fping"....  funktioniert problemlos und evtl auch schneller da in diesem Fall kein weiterer Versuch unternommen wird ob eine IP erreichbar ist. In diesem Fall wird dann kein "alive" zurückgegeben! 

MfG


----------



## PrincePaul (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

kann ich einfach den befehl fping verwenden oder brauche ich dafür ein extra Programm.
denn wenn ich das google kommt nur: "fping - a program to ping hosts in parallel"
und dergleichen.


Denn wenn es ein Programm ist bekomm ich das auf FreeNas ja nicht zum laufen das ist zwar auf Linux Basis aber hat ja ansich keinen Desktop oder so


----------



## M4jestix (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Das ist schon ein separates Paket. Müsstest du aber - wenn man es denn für BSD bekommt - über die Konsole installieren können. Bzw soweit ich mich erinnere gibt/gab es mal in der FreeNAS-Oberfläche eine Möglichkeit um zusätzliche Pakete zu installieren. FreeNAS ist bei mir allerdings schon ne Weile her, arebite mittlerweile nur noch mit "normalen" Linuxmaschinen da hier die Möglichkeiten für diverese Aufgaben wesentlich umfangreicher sind als in den beschnittenen BSD-Distributionen.


----------



## PrincePaul (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Ja gut aber das ist mir den Aufwand ehrlich gesagt nicht wert vor allem weils jetzt ja funktioniert.
Da müsste ich mich dann auch wieder einlesen und reinfuchen  hab nämlich so ansich GAR KEINE ahnung vom Programmieren und Skripte schreiben 

Für die Dinge die ich mit dem Gerät machen will reicht Freenas aber auch völlig
ist ja nur zum Sichern und zum Bereitstellen von Daten im Netzwerk von daher...


----------



## Bambusbar (19. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Auch wenn es schon klappt, vlt. noch eine weitere  Idee, falls du mal mehr als nur Ping checken willst 
Ich checke mit dem Skript z.b. ob die Samba-Freigabe auf dem NAS grade benutzt wird, falls nein, zack, STR. (STD fand ich unnötig, da beides laut meines Strommessgerät gleich viel Strom zieht, aber STR erheblich schneller beim Resume ist ^^)
Und per WoL wirds dann wieder ausm Schlaf geholt.

AutoSuspend


----------



## PrincePaul (20. Juli 2012)

Ja WoL hätte ich auch gerne.
Das Mainboard unterstütz das auch,
BIOS Einstellungen sind gemacht aber weder mit der Onboard Netzwerkkarte noch mit der die ich extra eingebaut habe funktioniert es

Erst dachte ich das liegt an Freenas also schnell mal Windows drauf gemacht und ging auch nicht.

Ist auch wieder so ne Sache die ich nicht verstehe... bei meinem normalen Rechner eine Option im BIOS umgestellt Zack funktioniert.

Momentan startet das Nas über ne Funksteckdose und restore on power loss Funktion.

Aber ich werd mir das mal reinziehen, evtl gibt's da ja wirklich noch was spannendes was man gebrauchen kann


----------



## M4jestix (20. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Für WOL brauchst du mitunter zumindest unter Linux evtl. das Paket "ethtool". Keine Ahnung ob es für dein FreeNAS auch gilt....


----------



## PrincePaul (20. Juli 2012)

M4jestix schrieb:
			
		

> Für WOL brauchst du mitunter zumindest unter Linux evtl. das Paket "ethtool". Keine Ahnung ob es für dein FreeNAS auch gilt....



Ne für FreeNas braucht man das normalerweise nicht. Bei anderen geht's auch so.

Aber bei mir gehts noch nichtmal unter Windows.
Es ist mit eigentlich aber auch egal ob ich nen Klick für wake up mache oder auf ner Fernbedienung auf on drücke


----------



## Bambusbar (20. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Fernbedienung, pft, Angeber. 

Die Frage ist - wie versuchst du den Rechner denn aufzuwecken?
Einfach anpingen oder so geht nicht, da musst du schon ein z.b. "MagicPaket" senden, je nachdem, in welchem Modus die Netzwerkkarte läuft (findet man z.b. mit ethtool raus ^^). 
Klappt sogar per Smartphone und nem WoL App.
Damit kann ich unten sitzen und das NAS oben aufwecken und dann auf dem WD TV Live gechillt was reinziehen 


Falls dich das Thema doch weiter interessiert -> Wake on LAN


----------



## PrincePaul (20. Juli 2012)

Ja ich hab mit nem Magic Paket versucht.
Hatte dann auch meinen richtigen pc auf WoL umgestellt um zu testen ob ich vielleicht was falsch mache ...

Aber mit dem ging's ohne Probleme.

Ich installiere sowieso nochmal Windows auf'm Nas um bei meinem selfmade gehäuse die temperaturen zu checken dann probiere ich nochmal bisschen rum

Die fernbedienung ist aber ne gute Alternative da mach ich halt den Strom halt einfach an und das ist ja wie ein simulierter Stromausfall wenn dann der Strom sozusagen wieder da ist und das Nas fährt hoch aber das Kennste ja bestimmt


----------



## Bambusbar (20. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Mhm, das kann bei Linux schon ein paar mehr Ursachen haben, das stimmt scho ^^
Vlt. wurde die Netzwerkkarte beim schlafen gehen entladen oder hat die WoL Einstellung nicht behalten ..
Man muss da meistens bissle fummeln, bis es läuft, aber dannrennt es wie Hund und is viel toller als Windoof ;P

Jo, Power Restore is mir bekannt ..aber irgendwie ..ich weiß nicht.

*€dith sagt:*
Hier stand Müll, großer Müll


----------



## PrincePaul (20. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Ne stop !!!

Ich fahre damit das Nas nur HOCH 

Also runterfahren mit strom aus kann ich auch nicht empfehlen ... 
aber dafür hab ich ja jetzt mein Skript


----------



## Bambusbar (20. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Ja, du hast natürlich recht.
Ich war bei dem Post wohl geistig umnachtet 

Arbeiten und tippen geht wohl nicht gut


----------



## PrincePaul (20. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

Ja das kenne ich nur zugut 

Aber ich werd mich da nochmal einlesen und dann schaun wa mal.
Ob man da überhaupt
Die ganz normalen Linux Tools installieren kann so einfach ... aber das sehn ich ja dann
Soweit wie ich mir das vorgestellt habe funktionierts ja


----------



## PrincePaul (20. Juli 2012)

*AW: Linux Skript für automatischen Shutdown*

@Bambusbar:

Müll haste hoffentlich rausgebracht 


Aber die Seiten die du gepostet hast sind echt cool 
sogar für mich verständlich  

Naja kommst ja auch aus Hannover
kann man da ja erwarten


----------

