Hallo wollte mir ein script für meinen server machn welches
Einen ping im ip bereich von 100-111 sucht und wenn er ne antwort bekommt sleept
Und wenn er keine antwort bekommt shutdowb 64 macht .
Sollte das mit while und if /if not gemacht werden ?
Hatte dazu maln paar versuche gacht die ich jetzt leider nicht posten kann da ich via mobiele schreibe.
Mfg
frage zu ping- shutdown
-
- [ gelöst ]
-
xsibit666 -
22. Juli 2013 um 07:42 -
Geschlossen -
Erledigt
-
-
Und das was Du (ohne das Du deinen Anfang zeigts) 'versuchst' in deutsch zu schreiben,
kann kaum jemand lesen.Vielleicht versuchst Du es nochmal, wenn Du wieder am Rechner sitzt !
Ein bischen mehr Mühe wäre schön...Micha
-
Verstehe nicht was man an meiner erklärung nicht versteht eine schleife die ping im netzwerk in einem bereich von 100-111sucht wenn er welche findet pausieren wenn er keine findet schutdown 64 machn.soll.
-
Ja. Kann man in einer While Schleife mit If-Anweisungen machen. Geht genauso gut auch mit Do ... Until und Switch oder Select.
Das sollte deine Frage beantworten. Wenn's weiter Probleme gibt, poste uns dein Script und es wird dir jemand helfen. Wir liefern hier keine Fertiglösungen ohne einen eigenen Versuch zu sehen. Dafür gibt es das Unterforum "Programmieranfragen".
-
[autoit]
while
[/autoit]
Ping ("192.168.2.100")Ping ("192.168.2.101")Ping ("192.168.2.102")
If@error thenShutdown (64)
If@not error thenSleep (60000)
EndifWend
Sry aber der fügt den text irgendwie anders ein als er bei mir aussieht -
Sry aber der fügt den text irgendwie anders ein als er bei mir aussieht
Dann verwende nicht den normalen Editor beim Posten im Forum, sonderen den zweiten Tab "Quellcode".Und was deine dürftige Erklärung angeht was du eigentlich machen willst solltest du auch nochmal in dich gehen und dir (wie bereits erwähnt wurde) mehr Mühe geben dein Anliegen verständlicher zu formulieren.
Dein derzeitiger code funktioniert jedenfalls sicher nicht so wie du es gern hättest. Du machst zwar Pings auf alle drei Rechner prüfst aber nur einmal auf @error und zwar nur beim letzten Ping. Ist der als einziger nicht erfolgreich fährt dein PC in den Standby, ist er als einziger erfolgreich schläft dein PC und prüft 60 Sekunden später erneut.
Die Frage ist nun aber was du eigentlich haben willst? Soll dein PC immer in den Standby gehen, wenn ein einziger der 3 Rechner nicht erreichbar ist, soll er nur in den Standby gehen wenn alle nicht erreichbar sind? Warum willst du überhaupt, dass dein PC in den Standby geht, wenn die anderen aus sind? Bist du sicher, dass Ping eine zuverlässige Methode ist um festzustellen ob andere Rechner im Netzwerk an sind? Pings können auch scheitern, wenn dein Netzwerk überlastet, gestört (schlechte WLAN Verbindung) oder wenn einer der Zielrechner bzw. dein Router ICMP Pakete blockt. Ich würde das ganze daher überdenken.
-
Also danke erst mal für die antworten
Das ziel des gedachten scripts ist das der pc im netzwerk sucht ob ein pc on ist wen keiner der 3 oder 4 pcs on ist soll er ausgehen wenn mind einer on ist soll er sleepenZeck ist der genannte pc wo das script laufen soll ist ein server mit twonky media server
Und der ausgehen soll wenn er nicht gebraucht wird
Aber halt auch nur ausgeht wenn alle anderen netzwerk geräte die ihn verwenden können aus sind -
Ok meinetwegen, aber wie geht er wieder an, wenn er gebraucht wird? Im Standby Modus läuft dein Script jedenfalls auch nicht mehr, für den "Server" ist es also nicht mehr möglich sich selbst aufzuwecken wenn er erstmal im Standby ist.
[autoit]
[/autoit][autoit][/autoit][autoit]
Global $aIP[3]=["192.168.2.100","192.168.2.101","192.168.2.102"]
Global $bAwake = Truewhile $bAwake
[/autoit][autoit][/autoit][autoit][/autoit]
for $i = 0 to ubound($aIP)-1
$bAwake = False
if ping($aIP[$i])>0 then
$bAwake = True
exitloop
endif
next
if $bAwake = True then sleep(60000)
if $bAwake = False then Shutdown(64)
wend -
Oki ers mal danke so gross währe mein wissen doch nicht gewesen
Zu dem mit aufwecken geht das per wol wake on lan dazu hab ich was aufm handy mit dem ich ihn wecke denn mein tv kann des leider nicht was echt praktisch währe
-
Dann solltest du mein Script aber ändern, denn wenn du den "Server" wieder aufweckst sollte das Script ja ebenfalls laufen, damit der Server später wieder in den Standby gehen kann. Sprich du brauchst eine Endlosschleife und müsstest daher "while 1" statt "while $bAwake" verwenden, derzeit würde sich das Script nach einmal Standby beenden.
-
Genau das dachte ich mir schon wie gesagt das script soll permanent laufen und beim server aufwachen wieder am start sein
-
Bedenke aber, dass im Falle einer Endlosschleife der Server immer sofort in den Standby geht, wenn du ihn aufweckst ohne zuvor eines der anderen Geräte zu starten. Es könnte außerdem passieren, dass der Server nach dem Aufwachen ein wenig braucht, bist sein Netzwerk wieder voll funktionsfähig ist und die Pings daher scheitern. Das würde ebenfalls in einer permanenten Standby Schleife enden, daher schlage ich vor das Script wie folgt zu ändern:
[autoit]
[/autoit][autoit][/autoit][autoit]
Global $aIP[3]=["192.168.2.100","192.168.2.101","192.168.2.102"]
Global $bAwake = Truewhile 1
[/autoit]
for $i = 0 to ubound($aIP)-1
$bAwake = False
if ping($aIP[$i])>0 then
$bAwake = True
exitloop
endif
next
if $bAwake = False then Shutdown(64)
sleep(60000) ; nach dem Aufwachen oder bei erfolgreichen Pings erstmal schlafen, bevor wieder geprüft wird, das lässt dir Zeit das Script zu beenden, sofern notwendig
wend -
Ah ok das geht natürlich auch
Stimmt währe nicht so passend wenn er aufwacht und standbyt -
- Offizieller Beitrag
Statt alle Rechner anzupingen, würde ich lieber ein NetView (alle Rechner im lokalen Netz) benutzen.
Progandy hat hier eine Funktion gepostet, die bei mir super funktioniert. -
Funktioniert super besten dank für die hilfe
-
Dann setzte den Präfix des Threads bitte auf gelöst
(1.Post bearbeiten)MfG
-
Muss doch nochmal was zu sagen wie schon jemand hier genannt hatte ich heute das problem das der server dauernd nach dem start runtergefahren ist
Wie könnte ich das jetzt noch anderst machn wenn er trotz ausgefürter ping runterfährt ? -
Hi,
ich weiss ja nicht ob es einfach nicht "schön" wäre es so zu machen, das das Script sich beim Shutdown beendet und beim Neustart einfach erneut startet. Im Start des Programms packst du dann ein Sleep(400000) rein.
Grüsse
AyKay -
Es könnte schon ausreichen das 'sleep(60000)' gleich hinter den Anfang der While-Schleife zu stellen, anstatt es kurz vor dem Wend() erst auszuführen.
Damit erreichst Du, das das Skript erst einmal eine Minute wartet, bevor der Ping-Test startet. Das könnte schon ausreichen. Ggf. auf 2 Minuten erhöhen, je nach dem ob das unter Umständen noch zu schnell ist. -
Es könnte auch sein, dass der Autoitbefehl "shutdown()" nicht blockierend ist und das sleep(60000) bereits ausgeführt wird solange der Rechner gerade in den Standby wechselt. Wenn das so sein sollte bin ich mir auch nicht sicher ob das Programm dann wirklich die vollen 60 Sekunden, nur noch einen Teil der 60 Sekunden oder garnicht mehr schläft beim aufwachen (die Zeitmessung könnte durch den Standby mode durcheinander kommen).
Mein Ansatz wäre daher das Windows Ereignisprotokoll zu prüfen, hier wird vermutlich jedes Aufwachen aus dem Standby vermerkt, d.h. man könnte im Falle eines shutdown() ein Flag setzen, welches in jedem Schleifendurchlauf durch auslesen des Eventlogs geprüft wird, ändert sich der Modus, sprich der PC ist wieder wach, dann schläft man kurz und erst dann wird wieder geprüft ob Netzwerkgeräte ein erneutes Standby erfordern (kein anderer Rechner online). Da ich die Energiesparsettings hier aber aus habe und meine Grafikkarte Probleme beim Aufwachen aus dem Standby hat kann ich das nicht testen.
-