2017-07-21 1 views
2

Juste à la recherche d'une correction/ajout à ce code de redémarrage cannibalisé pour (à l'origine un serveur Minecraft, bien que ce ne soit pas ce qu'il est utilisé pour l'instant).Ping du serveur batch et redémarrage pour un jeu

@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 

Actuellement, le travail est très simple: appelle server.bat et démarre le serveur. Il n'a rien des cloches et des sifflets que je voudrais bien avoir. La sortie de ping n'est pas fonctionnelle pour le moment.

L'objectif:

  1. Ping pour voir si une adresse IP spécifique (et peut-être des ports) sont accessibles.

  2. Si elles ne sont pas accessibles, fermez toutes les instances en cours de Server.exe

  3. Continuer jusqu'à pinger IP spécifique est accessible.

  4. Une fois que l'IP est accessible, appelez server.bat

Il a besoin de faire un ping à intervalles de 30 secondes ~.

Certains contexte pourquoi il est nécessaire:

Le serveur de jeu ne pas fermer son processus quel que soit qu'il soit en ligne ou non, il continue de fonctionner dans la fenêtre de processus. C'est pourquoi j'en ai besoin pour fermer toutes les instances actuelles, sinon on se retrouve avec des multiples du même serveur en cours d'exécution.

Le serveur est exécuté à partir d'un ordinateur local utilisant une connexion IP directe. Par conséquent, si l'ordinateur local n'est pas connecté à Internet, le serveur ne sera accessible à personne (évidemment). L'intention pour le .bat est de fonctionner continuellement même si l'utilisateur n'est pas à l'ordinateur, il veillera à ce que le serveur soit en ligne 24/7.

Il s'agira d'un fichier que je souhaite mettre à la disposition des autres hôtes du serveur qui voudront peut-être l'utiliser pour rester en ligne 24 heures sur 24, 7 jours sur 7. La vérification du port sera de s'assurer que les ports du serveur maître sont accessibles et que le défaut n'est pas de leur côté, ce n'est pas essentiel, donc si c'est trop de problèmes, ne vous inquiétez pas.

"server.bat" Inside:

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

Tous votre aide et les commentaires sont très bien accueilli. J'ai essayé de généraliser cela autant que possible pour le garder simple, ainsi il peut être changé pour n'importe qui d'autre qui peut trouver l'utilisation pour n'importe quelle application.

+0

Tout d'abord: vous n'avez pas besoin de la commande '@' dans la commande 'ping'. Deuxièmement, vous pouvez utiliser l'opérateur '&' ou '|' pour détecter si le ping a réussi ou non. Vous pouvez également essayer la variable '% errorlevel%'. – SteveFest

+0

@SteveFest Désolé, je ne comprends pas très bien où/comment j'utiliserais '% errorlevel%' ou '&' '|' ' Mon niveau de compréhension des lots est incontestablement limité. – Cinn

+0

aller à ss64.com/nt et vous pouvez les trouver – SteveFest

Répondre

1

On dirait que vous travaillez sur ou avec une machine Windows. Power Shell peut être une option pour écrire vos scripts. Je suis tombé sur cette question après avoir enquêté Test-Connection et Test-NetConnection, qui sont tous deux un peu comme ping, et le dernier vous permet de tester si un port est ouvert. Vous ne savez pas s'il existe des commandes de fichiers par lots comme celles-ci, mais Power Shell vous permet d'utiliser la plupart des commandes par lots.Ces deux commandes ont des tonnes d'exemples en ligne, et sont très faciles à utiliser dans votre cas d'utilisation.

Vous voulez probablement avoir une boucle while (true) en cours d'exécution, et effectuer périodiquement vos vérifications ping/port. Cela satisfera votre exigence de vérification continue. Start-Sleep est une applet de commande pour vous permettre de mettre en pause votre script, ce que vous voulez faire dans votre boucle pour toujours.

Vous pouvez call batch files from Power Shell (another link from another good resource), ce qui vous permettra de réutiliser vos scripts existants si vous ne voulez pas les réécrire dans Power Shell.