frage zu ping- shutdown

  • 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

    Einmal editiert, zuletzt von xsibit666 (8. August 2013 um 13:37) aus folgendem Grund: Dank vieler geduldiger hilfe :D

  • 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

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

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

    [/autoit]


    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 sleepen

    Zeck 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]


    Global $aIP[3]=["192.168.2.100","192.168.2.101","192.168.2.102"]
    Global $bAwake = True

    [/autoit][autoit][/autoit][autoit]

    while $bAwake
    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

    [/autoit][autoit][/autoit][autoit][/autoit]
  • 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.

  • 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]


    Global $aIP[3]=["192.168.2.100","192.168.2.101","192.168.2.102"]
    Global $bAwake = True

    [/autoit][autoit][/autoit][autoit]

    while 1
    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

    [/autoit]
  • Dann setzte den Präfix des Threads bitte auf gelöst ;)
    (1.Post bearbeiten)

    MfG

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • 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.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • 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.