Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Linux-Server soll automatisch herunterfahren!

Frage Entwicklung Batch & Shell

Mitglied: DonniDuck

DonniDuck (Level 1) - Jetzt verbinden

06.11.2006, aktualisiert 07.05.2008, 21366 Aufrufe, 16 Kommentare

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!
Mitglied: 6890
06.11.2006 um 17:03 Uhr
hallo,

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.
done
das mit dem piepsen weis ich leider ni, und das script würde ich vorher auch testen (is jetzt so auf die schnelle geschrieben)

Mit freundlichen Grüßen godlike P
Bitte warten ..
Mitglied: DonniDuck
06.11.2006 um 18: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!
Bitte warten ..
Mitglied: 6890
07.11.2006 um 17:30 Uhr
1.
Die Datei, wo die Clients eingetragen sind,
kann mit einem normalen Editor erstellt
werden (vi, nano)?
ja
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):
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?
for i in $CLIENTS bedeutet gehe jede ip in $CLIENTS durch und setze sie in i ein
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
5.
Könntest du die wichtigen Zeilen kurz
kommentieren (Einsteiger in Shell)?
ja könnt ich
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.
done
Danke und Gruß Donni!
bitte
Mit freundlichen Grüßen godlike P
Bitte warten ..
Mitglied: DonniDuck
08.11.2006 um 16:39 Uhr
Ich habe jetzt mal deine Shell-Routine ausprobiert:

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.32
Wenn ich den Rechner ganz normal anpinge geht es! Was ist das Problem?

Gruß Donni!
Bitte warten ..
Mitglied: 6890
08.11.2006 um 16:45 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"

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!!!

Mit freundlichen Grüßen godlike P
Bitte warten ..
Mitglied: DonniDuck
08.11.2006 um 17:06 Uhr
So habe jetzt mal die Änderung vorgenommen, leider zeigt er aber nur folgendes an:

grep /etc/skripte/auto-shutdown-ips.dat

Nichts passiert und nach etwa 5 Minuten wird die Routine abgebrochen bzw. manueller Benutzerabbruch!
Bitte warten ..
Mitglied: 6890
08.11.2006 um 17:23 Uhr
ahh sorry ich bin bescheuert da muss natürlich cat statt grep hin

also CLIENTS=`cat /etc/skripte/auto-shutdown-ips.dat`

sorry sorry sorry

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: DonniDuck
08.11.2006 um 17:48 Uhr
Jetzt wird es aber langsam richtig spannend!

Also der Befehl funktioniert.... ABER:

wenn z.B. ein Rechner an und einer aus ist, wird trotzdem der Rechner heruntergefahren, müsste man nicht irgendwie alle IPs logisch und verknüpfen?
Bitte warten ..
Mitglied: 6890
08.11.2006 um 18:23 Uhr
ahso hmmja eigentlich schon
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.
fi
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
Mit freundlichen Grüßen
Bitte warten ..
Mitglied: DonniDuck
08.11.2006 um 18:42 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)!
Bitte warten ..
Mitglied: 6890
08.11.2006 um 18:54 Uhr
nee das is doch ne schleife (for) deswegen wird jeder ping ausgewertet!!

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: DonniDuck
08.11.2006 um 19:21 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:

01.
+ test 1 -eq 0 
02.
+ test -ne 1 
03.
/etc/skripte/auto-shutdown.sh: line 16: test: -ne: unary operator expected
Was ist jetzt los?

Danke für deine Unterstützung!!!
Bitte warten ..
Mitglied: DonniDuck
08.11.2006 um 19:36 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
Bitte warten ..
Mitglied: 6890
08.11.2006 um 20:05 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
Bitte warten ..
Mitglied: DonniDuck
09.11.2006 um 09:31 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:

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
Bitte warten ..
Mitglied: DanielSGE
07.05.2008 um 14:36 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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows 10
gelöst PCs über eine Batch Datei nach 2 Tagen Laufzeit automatisch herunterfahren (12)

Frage von Karsten70154 zum Thema Windows 10 ...

Linux
Linux-Server (IGEL UMS5) auf Windows umziehen (2)

Frage von Holywarrior1 zum Thema Linux ...

Debian
gelöst Kein Zugriff auf Linux Server nach Neustart - Alle Ports zu (22)

Frage von itschloegl zum Thema Debian ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...