2017-07-21 2 views
2

Nur auf der Suche nach einer Korrektur/Ergänzung zu diesem kannibalisierten Neustart-Code für (ursprünglich ein Minecraft-Server, obwohl das ist nicht, was es jetzt verwendet wird).Batch Server Ping und Neustart für ein Spiel

@echo off 
title Server Restarter 
color 0A 
cls 
@%SystemRoot%\system32\ping.exe -n 1 xxx.xxx.x.xx 
pause 

:start 
Call Server.bat 
cls 
pause 

Das gegenwärtig der Fall ist eine sehr einfache Aufgabe: ruft server.bat und startet den Server. Es hat nichts von dem Schnickschnack, ich hätte es aber gerne. Die Ausgabe von Ping ist zur Zeit nicht funktionsfähig.

Das Ziel:

  1. Ping, um zu sehen, ob eine bestimmte IP (und vielleicht Ports) erreichbar ist.

  2. Wenn sie nicht erreichbar, schließen Sie alle aktuellen Instanzen von Server.exe

  3. Weiter bis bestimmte IP-Pingen erreichbar ist.

  4. Nachdem die IP- erreichbar ist, rufen server.bat

Es muss in Abständen von ca. 30 Sekunden bis pingen.

Einiger Kontext dafür, warum es gebraucht wird:

Der Spielserver seinen Prozess schließt nicht zur Zeit unabhängig davon, ob online oder nicht ist, geht es weiter im Prozessfenster laufen. Deshalb muss ich alle aktuellen Instanzen schließen, sonst enden wir einfach mit mehreren gleichen Servern.

Der Server wird von einem lokalen Computer mit direkter IP-Verbindung ausgeführt. Wenn der lokale Computer nicht mit dem Internet verbunden ist, ist der Server (offensichtlich) für niemanden erreichbar. Die Absicht für die .bat ist, kontinuierlich zu laufen, selbst wenn der Benutzer nicht am Computer ist, wird es dafür sorgen, dass der Server 24/7 online ist.

Dies wird eine Datei sein, die ich anderen Server-Hosts zur Verfügung stellen möchte, die sie verwenden möchten, um sich rund um die Uhr online zu halten.

Die Überprüfung des Ports wird sicherstellen, dass die Master-Server-Ports erreichbar sind und der Fehler ist/ist nicht auf ihrer Seite, das ist nicht wichtig, also, wenn es zu viel Mühe ist, keine Sorge.

Inside "server.bat":

@echo off 
echo Server process starting 
echo Ctrl+Alt+Del to Kill 
Server.exe -batchmode -nographics 

Alle Ihre Unterstützung und Kommentare werden sehr begrüßt. Ich habe versucht, dies so weit wie möglich zu verallgemeinern, um es einfach zu halten, so dass es für jeden geändert werden kann, der es für irgendeine Anwendung verwenden könnte.

+0

Zunächst einmal: Sie brauchen nicht das '@' im 'ping' Befehl. Zweitens können Sie den Operator '&' oder '|' verwenden, um zu erkennen, ob der Ping erfolgreich war oder nicht. Sie können auch '% errorlevel%' Variable versuchen. – SteveFest

+0

@SteveFest Sorry, ich verstehe nicht ganz, wo/wie würde ich '% errorlevel%' oder '&' '|' verwenden Mein Stapelverständnis ist zweifellos begrenzt. – Cinn

+0

gehen Sie zu ss64.com/nt und Sie können diese heraus finden – SteveFest

Antwort

1

Klingt, als ob Sie an oder mit einem Windows-Rechner arbeiten. Power Shell könnte eine Option zum Schreiben Ihrer Skripte sein. Ich bin über diese Frage nach der Untersuchung Test-Connection und Test-NetConnection gestolpert, die beide Art von wie Ping sind, und letzteres lässt Sie testen, ob ein Port offen ist. Nicht sicher, ob Batch-Dateibefehle wie diese vorhanden sind, aber mit Power Shell können Sie die meisten Stapelbefehle verwenden.Beide Befehle haben viele Beispiele online und sind sehr einfach in Ihrem Anwendungsfall zu verwenden.

Sie möchten wahrscheinlich eine while (true)-Schleife ausführen lassen und regelmäßig Ihre Ping/Port-Prüfungen durchführen. Das wird Ihre ständige Prüfungsanforderung erfüllen. Start-Sleep ist ein Cmdlet, mit dem Sie Ihr Skript pausieren können, was Sie in Ihrer Schleife für immer machen möchten.

Sie können call batch files from Power Shell (another link from another good resource), so dass Sie Ihre vorhandenen Skripts wiederverwenden können, wenn Sie sie nicht in Power Shell neu schreiben möchten.