myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Brauche Hilfe bei Server-Shutdown "Programm" (https://mygully.com/showthread.php?t=2205102)

freddy79 13.01.11 17:13

Brauche Hilfe bei Server-Shutdown "Programm"
 
Ich hoffe mal, ich bin hier richtig.

Ich habe folgendes Problem: Ich habe einen Rechner auf dem meine ganzen Mediadateien drauf sind. Diese sind für's Netzwerk freigegeben damit die Family darauf zugreifen kann. (Das halbe Haus ist vernetzt.) Dieser Rechner ist immer an. Nun habe ich mir überlegt, dass es doch sicherlich möglich sein muß eine Batch Datei zu schreiben, die alle paar Minuten (Ich dachte da so an ca. alle 5 Minuten.) prüft ob überhaupt noch ein Rechner im Netzwerk angeschaltet ist. (Per Pingabfrage?)

Also mal so wie ich mir das vorstelle in Worten dargestellt.

Programm startet (Ich würde es dann in den Autostart packen.)
Programm prüft erste IP-Adresse
Wenn aus, dann nächste IP Adresse / Wenn an Wartezeit 5 Minuten und neu starten
Das ganze dann eben mit allen IP's (Sind ca. 15)
Wenn dann alle IP's geprüft sind und keiner antwortet soll der "Server" dann runterfahren.

Den "Server" per Wake on Lan zu starten, ist kein Problem. Das bekomme ich selber hin und würde es dann in den Autostart der im Netzwerk befindlichen Rechner packen damit jeder wie gewohnt Zugriff darauf hat.

Ich hoffe ihr könnt mir ein wenig auf die Sprünge helfen.

P.S. Der "Server" läuft auf Win7 falls das wichtig ist.

gosha16 13.01.11 18:13

Und wie lautet jetzt deine Frage?

Mint 13.01.11 18:29

Ich vermute mal er will wissen wie man die Batchdatei schreibt die sein Vorhaben umsetzt?

mfg, Mint.

spartan-b292 13.01.11 18:52

Zitat:

Programm prüft erste IP-Adresse
Den Adressraum kennst du vermtl. Also würde ich die IP in eine Variable legen die die IP etwa so speichert:
192.168.178.X
Das X lässt du in jedem schritt durch eine Schleife eins hochzählen.

EDIT:Eine andere Möglichkeit wäre vllt die IPs in einer Datei z.B IPliste.txt abzulegen und die IPs daraus zu nehmen.

Das Ergebnis eines Pings überprüfst du (laut Google) so:
Ping Varibale_die_die_IP_enthält | find "Reply"
if errorlevel 1 -Anweisung-
else -Anweisung2-

In -Anweisung- könntest du z.B bei einen Negativen Ping eine Variable hochzählen lassen, ist die Variable nach dem Durchlaufen aller Pings gleich der Anzahl an Rechner schaltet sich der Server aus.

In -Anweisung2- baust du dann das warten ein (laut Google) so:
ping -n 300 127.0.0.1>nul
das Bewirkt eine Verzögerung von 300 Sekunden, danach dann eben neustarten.

Nur mal so als erste Idee habe selsbt schon ewig nichts mehr mit Batch gemacht und ich meine mich zu erinnern dass die Batchbefehle unter win7 nicht mehr so funktionieren, deshalb können die Codebeispiele evtl auch nicht funktionieren.

tha_specializt 13.01.11 21:04

Microsoft Windows war als Server-OS schon immer eher ungeeignet - zumal mal (wenn überhaupt) dann auch eine Serverversion nutzen sollte - in den Desktop-Versionen von Winblows gibt es zuviele unberechenbare Faktoren und Angriffspunkte.
Ich würde -insbesondere in Hinsicht auf die Anforderungen- unbedingt Linux empfehlen, dort ist die Aufgabe auch nativ bzw. deutlich einfacher umsetzbar - die PowerShell erfordert mitunter unfassende Kenntnisse über VB, die PS selbst und sogar COM (wenn es komplexer werden soll) ... nun .. ein derartiges S***** wäre wohl mit VB auch recht leicht, hat man erstmal die Kenntnisse dazu.

Unter Unix kann man ganz einfach ein S***** über die Crontab starten :
Code:

*/5 * * * * su -c /s***** || halt
/s*****:
Code:

#!/bin/bash

host=127.0.0.1
port="22"
wc=`which wc`
nmap=`which nmap`
ping=`which ping`
cut=`which cut`
grep=`which grep`
tr=`which tr`
keyword="open"
echo=`which echo`

success="Client online"
failure="Client offline"

_portscan()
{
        $nmap -PN -p$port -R $host | $grep $port | $cut -d ' ' -f2 | $grep $keyword > /dev/null && { echo $success; return 0; } || { echo failure; return 1; }
}

_ping()
{
        $ping $host -i 5 -qc 3 -W 15 && return 0 || return 1
}

for ((  i = 1 ;  i <= 20;  i++  ))
do     
        _ping && _portscan && exit 0
done

exit 1

--> das S***** prüft zusätzlich nen TCP-Port den du angibst ... kann man weglassen, ausserdem müsste man noch das Iterieren der IP-Liste einbauen aber das is ja kein Problem, die Schleife hat man ja bereits

tha_specializt 14.01.11 23:39

nachträgliche Anmerkung : vermutlich müsste das 127.0.0.1 in Anführungszeichen stehen ... ich habs jetz nich getestet; im Grunde funzt das S***** aber.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.