Linux-Server soll automatisch herunterfahren!
06.11.2006
08:44:19 Uhr14726 Aufrufe
16 Antworten
08:44:19 Uhr
16 Antworten
Noch nicht bewertet
Der Linux-Server (Ubuntu-6.06) soll sich automatisch ausschalten, wenn keine Clients mehr im Netz sind, wie kann man dies lösen?
Hallo,
ich möchte gerne einen Linux-Server (Ubuntu-6.06) automatisch herunterfahren. Dieser sollte aller 5 Minuten nachsehen ob noch Clientrechner im Netzwerk vorhanden sind. Sollte noch ein Client aktiv sein, dann wird die Routine einfach abgebrochen.
Ist kein Client mehr im Netz, dann soll der Server sich nach einer Minute ausschalten (Textmeldung ausgeben, Piepston am Server soll erzeugt werden).
1.
Kann die Textmeldung nur am Linux-Server ausgegeben werden oder auch an den Windows-Clients?
2.
Der Server soll natürlich bestimmte "Clients" ignorieren, wie z.B. den Router und den Netzwerkdrucker!
3.
Vor dem Herunterfahren soll der Server noch ein bestimmtes Verzeichnis löschen, wie kann man dies mit einbinden (rm –f /home/transfer)?
4.
Kurz vor dem Herunterfahren (z.B. 20 Sekunden) soll der Server eine Warnmeldung an den Summer ausgeben (regelmäßiges Piepsen)!
5.
Ich habe mich im Internet schon einmal umgesehen und habe herausgefunden, dass man dies mit der Sprache Shell lösen kann. Da ich mich mit dieser Thematik noch nicht sehr stark befasst habe, wäre es schön wenn ihr mir ein paar Tipps bzw. Lösungsansätze geben könnt!
Gruß Donni Duck!
ich möchte gerne einen Linux-Server (Ubuntu-6.06) automatisch herunterfahren. Dieser sollte aller 5 Minuten nachsehen ob noch Clientrechner im Netzwerk vorhanden sind. Sollte noch ein Client aktiv sein, dann wird die Routine einfach abgebrochen.
Ist kein Client mehr im Netz, dann soll der Server sich nach einer Minute ausschalten (Textmeldung ausgeben, Piepston am Server soll erzeugt werden).
1.
Kann die Textmeldung nur am Linux-Server ausgegeben werden oder auch an den Windows-Clients?
2.
Der Server soll natürlich bestimmte "Clients" ignorieren, wie z.B. den Router und den Netzwerkdrucker!
3.
Vor dem Herunterfahren soll der Server noch ein bestimmtes Verzeichnis löschen, wie kann man dies mit einbinden (rm –f /home/transfer)?
4.
Kurz vor dem Herunterfahren (z.B. 20 Sekunden) soll der Server eine Warnmeldung an den Summer ausgeben (regelmäßiges Piepsen)!
5.
Ich habe mich im Internet schon einmal umgesehen und habe herausgefunden, dass man dies mit der Sprache Shell lösen kann. Da ich mich mit dieser Thematik noch nicht sehr stark befasst habe, wäre es schön wenn ihr mir ein paar Tipps bzw. Lösungsansätze geben könnt!
Gruß Donni Duck!
godlike P schreibt am 06.11.2006 um 17:03:34 Uhr
hallo,
ja das kann man mit einem shell script lösen.
ich würde es so machen:
das mit dem piepsen weis ich leider ni, und das script würde ich vorher auch testen (is jetzt so auf die schnelle geschrieben)
mfg godlike P
ja das kann man mit einem shell script lösen.
ich würde es so machen:
01.
#!/bin/bash 02.
03.
#datei wo die ips der clients drinne sind 04.
CLIENTS=`grep /DATEI/DER/CLIENTS` 05.
06.
#verzeichnis was gelöscht werden soll 07.
DELETE=/home/transfer 08.
09.
for i in $CLIENTS 10.
do 11.
ping -c 4 $i 12.
if test $? -eq 0 13.
then 14.
echo "$i ist erreichbar" 15.
else 16.
rm -rf $DELETE 17.
echo "Der Server wird heruntergefahren..." 18.
sleep(20) 19.
init 0 20.
exit 21.
fi 22.
donedas mit dem piepsen weis ich leider ni, und das script würde ich vorher auch testen (is jetzt so auf die schnelle geschrieben)
mfg godlike P
DonniDuck schreibt am 06.11.2006 um 18:22:22 Uhr
Super,
das hilft mir erst einmal weiter!
Einige Fragen noch:
1.
Die Datei, wo die Clients eingetragen sind, kann mit einem normalen Editor erstellt werden (vi, nano)?
2.
Wie sollte diese Datei aufgebaut sein:
192.168.115.1;192.168.115.2;192.168.115.3 usw.
3.
Wenn ich dies richtig interpretiere ist i eine Variable und steht für die IP-Adressen der Clients, mit welcher Routine bzw. Befehl werden die einzelnen IP´s angesprochen?
4.
Gibt es eine Art Zähler oder eine Konstante, denn der Befehl Ping muss ja z.B. 3 x (für 3 Clients) durchgeführt werden!
5.
Könntest du die wichtigen Zeilen kurz kommentieren (Einsteiger in Shell)?
Danke und Gruß Donni!
das hilft mir erst einmal weiter!
Einige Fragen noch:
1.
Die Datei, wo die Clients eingetragen sind, kann mit einem normalen Editor erstellt werden (vi, nano)?
2.
Wie sollte diese Datei aufgebaut sein:
192.168.115.1;192.168.115.2;192.168.115.3 usw.
3.
Wenn ich dies richtig interpretiere ist i eine Variable und steht für die IP-Adressen der Clients, mit welcher Routine bzw. Befehl werden die einzelnen IP´s angesprochen?
4.
Gibt es eine Art Zähler oder eine Konstante, denn der Befehl Ping muss ja z.B. 3 x (für 3 Clients) durchgeführt werden!
5.
Könntest du die wichtigen Zeilen kurz kommentieren (Einsteiger in Shell)?
Danke und Gruß Donni!
godlike P schreibt am 07.11.2006 um 17:30:55 Uhr
1.
Die Datei, wo die Clients eingetragen sind,
kann mit einem normalen Editor erstellt
werden (vi, nano)?
jaDie Datei, wo die Clients eingetragen sind,
kann mit einem normalen Editor erstellt
werden (vi, nano)?
2.
Wie sollte diese Datei aufgebaut sein:
192.168.115.1;192.168.115.2;192.168.115.3
usw.
nein eher so ohne leerzeilen etc, einfach nacheinander pro zeile 1 ip): Wie sollte diese Datei aufgebaut sein:
192.168.115.1;192.168.115.2;192.168.115.3
usw.
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
usw
3.
Wenn ich dies richtig interpretiere ist i
eine Variable und steht für die
IP-Adressen der Clients, mit welcher Routine
bzw. Befehl werden die einzelnen IP´s
angesprochen?
4.
Gibt es eine Art Zähler oder eine
Konstante, denn der Befehl Ping muss ja z.B.
3 x (für 3 Clients) durchgeführt
werden!
keine ahnung was du meinst Gibt es eine Art Zähler oder eine
Konstante, denn der Befehl Ping muss ja z.B.
3 x (für 3 Clients) durchgeführt
werden!
5.
Könntest du die wichtigen Zeilen kurz
kommentieren (Einsteiger in Shell)?
ja könnt ichKönntest du die wichtigen Zeilen kurz
kommentieren (Einsteiger in Shell)?
01.
#!/bin/bash 02.
#datei wo die ips der clients drinne sind 03.
CLIENTS=`grep /DATEI/DER/CLIENTS` 04.
05.
#verzeichnis was gelöscht werden soll 06.
DELETE=/home/transfer 07.
08.
#gehe alle ips durch und setze sie in i ein 09.
for i in $CLIENTS 10.
do 11.
#ping die ip die in $i steht an 12.
ping -c 4 $i 13.
#wenn es erfolgreich war 14.
if test $? -eq 0 15.
then 16.
#gebe das aus 17.
echo "$i ist erreichbar" 18.
#ansonsten 19.
else 20.
#lösche das transfer verzeichnis 21.
rm -rf $DELETE 22.
#gebe das aus 23.
echo "Der Server wird heruntergefahren..." 24.
#warte 20 sekunden 25.
sleep(20) 26.
#fahre den server herunter 27.
init 0 28.
#beende das script 29.
exit 30.
fi 31.
doneDanke und Gruß Donni!
bitte mfg godlike P
DonniDuck schreibt am 08.11.2006 um 16:39:48 Uhr
Ich habe jetzt mal deine Shell-Routine ausprobiert:
Folgende Änderung habe ich noch vorgenommen:
1.
sleep 20 statt sleep (20)...durch den Befehl
sh -n /etc/skripte/auto-shutdown.sh
war ein Fehler angezeigt
Das Problem:
Der Server fährt wunderbar herunter, aber leider auch immer, wenn ich den Testbefehl ausführe:
sh -x /etc/skripte/auto-shutdown.sh
Ich bekomme nur die Fehlermeldung:
ping: unknown host grep
Also wird der Ping-Test nicht durchgeführt bzw. er kann sich die Daten nicht aus der /etc/skripte/auto-shutdown-ips.dat holen!
In dieser Datei steht aber nur:
Wenn ich den Rechner ganz normal anpinge geht es! Was ist das Problem?
Gruß Donni!
01.
#!/bin/bash 02.
03.
#Datei wo die IPs der Clients hinterlegt sind 04.
CLIENTS="grep /etc/skripte/auto-shutdown-ips.dat" 05.
06.
for i in $CLIENTS 07.
do 08.
ping -c 4 $i 09.
if test $? -eq 0 10.
then 11.
echo "$i ist erreichbar!" 12.
else 13.
echo "Der Server wird in 20 Sekunden heruntergefahren..." 14.
sleep 20 15.
init 0 16.
exit 17.
fi 18.
done 19.
Folgende Änderung habe ich noch vorgenommen:
1.
sleep 20 statt sleep (20)...durch den Befehl
sh -n /etc/skripte/auto-shutdown.sh
war ein Fehler angezeigt
Das Problem:
Der Server fährt wunderbar herunter, aber leider auch immer, wenn ich den Testbefehl ausführe:
sh -x /etc/skripte/auto-shutdown.sh
Ich bekomme nur die Fehlermeldung:
ping: unknown host grep
Also wird der Ping-Test nicht durchgeführt bzw. er kann sich die Daten nicht aus der /etc/skripte/auto-shutdown-ips.dat holen!
In dieser Datei steht aber nur:
01.
192.168.115.32Wenn ich den Rechner ganz normal anpinge geht es! Was ist das Problem?
Gruß Donni!
godlike P schreibt am 08.11.2006 um 16:45:14 Uhr
Ich habe jetzt mal deine Shell-Routine
ausprobiert:
<code>
#!/bin/bash
#Datei wo die IPs der Clients hinterlegt
sind
CLIENTS="grep
/etc/skripte/auto-shutdown-ips.dat"
ausprobiert:
<code>
#!/bin/bash
#Datei wo die IPs der Clients hinterlegt
sind
CLIENTS="grep
/etc/skripte/auto-shutdown-ips.dat"
ja weil das "" falsch ist !!! deswegen bekommt er keine ips!!
da müssen anstatt hochkommas sogenannte backticks (shift + das zeichen rechts von ß) hin.
denn dann interpretiert die shell das als kommando und führt grep blabla aus und schreibt das ergebnis in die variable!!!
mfg godlike P
godlike P schreibt am 08.11.2006 um 18:23:17 Uhr
ahso hmmja eigentlich schon
dann halt so:
d.h. wenn einer erreichbar ist wird a auf 1 gesetzt und das script läuft normal durch und wenn a nicht gleich 1 ist, also keiner an ist, fährt derserver runter 
mfg
dann halt so:
01.
#!/bin/bash 02.
#Datei wo die IPs der Clients hinterlegt sind 03.
CLIENTS=`grep /etc/skripte/auto-shutdown-ips.dat` 04.
05.
for i in $CLIENTS 06.
do 07.
ping -c 4 $i 08.
if test $? -eq 0 09.
then 10.
a=1 11.
fi 12.
done 13.
14.
if test $a -ne 1 15.
then 16.
echo "Der Server wird in 20 Sekunden heruntergefahren..." 17.
sleep 20 18.
init 0 19.
exit 20.
fimfg
DonniDuck schreibt am 08.11.2006 um 18:42:54 Uhr
Ich habe mal etwas gegoogelt:
Also:
$? steht doch für:
"gibt den Return-Code des zuletzt ausgeführten Kommandos an (0 bei erfolgreicher Ausführung)"
für was steht denn -eq 0 (...wenn gleich Null)??
Wenn also der Ping z.B. 5 mal ausgeführt wird, sind dies doch 5 einzelne Kommandos, die Folge ist doch, dass nur der letzte Ping hier ausgewertet wird.... oder???
Deshalb meine Frage zum Anfang mit einem Puffer (Stack)!
Also:
$? steht doch für:
"gibt den Return-Code des zuletzt ausgeführten Kommandos an (0 bei erfolgreicher Ausführung)"
für was steht denn -eq 0 (...wenn gleich Null)??
Wenn also der Ping z.B. 5 mal ausgeführt wird, sind dies doch 5 einzelne Kommandos, die Folge ist doch, dass nur der letzte Ping hier ausgewertet wird.... oder???
Deshalb meine Frage zum Anfang mit einem Puffer (Stack)!
DonniDuck schreibt am 08.11.2006 um 19:21:27 Uhr
Ich habe es jetzt mal mit 4 Rechnern getestet:
Alles läuft nur bei der Option "Alle aus" (Server soll sich ausschalten) kommt folgende Meldung:
Was ist jetzt los?
Danke für deine Unterstützung!!!
Alles läuft nur bei der Option "Alle aus" (Server soll sich ausschalten) kommt folgende Meldung:
01.
+ test 1 -eq 0 02.
+ test -ne 1 03.
/etc/skripte/auto-shutdown.sh: line 16: test: -ne: unary operator expectedWas ist jetzt los?
Danke für deine Unterstützung!!!
DonniDuck schreibt am 08.11.2006 um 19:36:07 Uhr
Hier noch einmal das aktuelle Skript:
01.
#!/bin/bash 02.
#Datei wo die IPs der Clients hinterlegt sind 03.
CLIENTS=`cat /etc/skripte/auto-shutdown-ips.dat` 04.
05.
for i in $CLIENTS 06.
do 07.
ping -c 4 $i 08.
if test $? -eq 0 09.
then 10.
a=1 11.
echo "$i ist erreichbar!" 12.
fi 13.
done 14.
15.
if test $a -ne 1 16.
then 17.
echo "Der Server wird in 20 Sekunden heruntergefahren..." 18.
sleep 20 19.
init 0 20.
exit 21.
fi
godlike P schreibt am 08.11.2006 um 20:05:29 Uhr
probiers mal so:
01.
#!/bin/bash #Datei wo die IPs der Clients hinterlegt sind 02.
CLIENTS=`cat /etc/skripte/auto-shutdown-ips.dat` 03.
a=0 04.
05.
for i in $CLIENTS 06.
do 07.
ping -c 4 $i 08.
if test $? -eq 0 09.
then 10.
a=1 11.
echo "$i ist erreichbar!" 12.
fi 13.
done 14.
15.
if test $a -ne 1 16.
then 17.
echo "Der Server wird in 20 Sekunden heruntergefahren..." 18.
sleep 20 19.
init 0 20.
exit 21.
fi
DonniDuck schreibt am 09.11.2006 um 09:31:43 Uhr
Hurra es funktioniert!
Super gemacht godlike P!
Noch eine kleine Zusatzaufgabe....Während der Wartezeit soll der Benutzer die Möglichkeit haben den Vorgang abzubrechen!
Wie kann man dies lösen? Die Tastatur muss ja abgefragt werden!
Meine Vorstellung:
Gruß in meine Heimat
Donni Duck
Super gemacht godlike P!
Noch eine kleine Zusatzaufgabe....Während der Wartezeit soll der Benutzer die Möglichkeit haben den Vorgang abzubrechen!
Wie kann man dies lösen? Die Tastatur muss ja abgefragt werden!
Meine Vorstellung:
01.
if test $a -ne 1 02.
then 03.
echo "Der Server wird in 20 Sekunden heruntergefahren..." 04.
sleep 20 05.
echo ".... Möchten Sie den Autoshutdown abbrechen, dann betätigen Sie die Taste "e"!!!" 06.
if test "Taste e gedrückt -eq 0" 07.
then 08.
echo "Abbruch des Auto-Shutdowns durch Benutzer $Benutzername" 09.
exit 10.
fi 11.
init 0 12.
exit 13.
fi 14.
15.
Gruß in meine Heimat
Donni Duck
DanielSGE schreibt am 07.05.2008 um 14:36:05 Uhr
Hallo! Nach solch einen Skript hab ich auch schon seit Tagen Ausschau gehalten. Wäre es aber möglich noch etwas einzubauen?
Gut wäre es nämlich wenn dieses Überprüfung noch ein weiteres Mal durchgeführt würde. Also nicht, dass der eine Rechner, der verbunden ist, gerade rebootet und plötzlich ist der Server aus.
Wäre für ein bisschen Hilfe sehr dankbar;)
Gruß
Daniel
Gut wäre es nämlich wenn dieses Überprüfung noch ein weiteres Mal durchgeführt würde. Also nicht, dass der eine Rechner, der verbunden ist, gerade rebootet und plötzlich ist der Server aus.
Wäre für ein bisschen Hilfe sehr dankbar;)
Gruß
Daniel




