2017-07-21 51 views
2

只需要寻找一个更正/添加到这个Cannibalized重新启动代码(原来是一个Minecraft服务器,虽然这不是它现在使用的)。批处理服务器ping并重新启动游戏

@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 

这当前做了一个非常简单的工作:调用server.bat并启动服务器。它没有我想要的那些花里胡哨的东西。 此时ping的输出功能不起作用。

目标:

  1. 平,看是否有特定的IP(可能端口)可达。

  2. 如果他们不可达,关闭的任何当前情况下SERVER.EXE

  3. 继续执行ping 直到特定IP 可达。

  4. 一旦IP 到达,叫server.bat

它需要在约30秒的时间间隔来ping。

有些情况下为什么它的需要:

游戏服务器目前不会不管它是在线与否的关闭其进程,它继续在这个过程中窗口中运行。这就是为什么我需要关闭任何当前实例,否则我们最终会运行多个相同的服务器。

服务器使用直接IP连接从本地计算机运行,因此如果本地计算机未连接到Internet,服务器将无法与任何人(显然)联系。 .bat的意图是持续运行,即使用户不在计算机上,它也会负责确保服务器24/7在线。

这将是一个文件,我想提供给其他服务器主机谁可能想要使用它来保持自己24/7在线。

端口检查将确保主服务器端口可到达并且故障不在他们一边,这不是必需的,所以如果它太麻烦了,不要担心。

内部 “Server.bat”:

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

您的帮助和意见的一切都非常欢迎。我试图尽可能地概括这一点,以保持简单,所以可以对任何可能适用于任何应用程序的人进行更改。

+0

首先:在'ping'命令中不需要'@'。其次,您可以使用'&'或'|'运算符来检测ping是否成功。你也可以尝试'%errorlevel%'变量。 – SteveFest

+0

@SteveFest对不起,我不太明白,我在哪里/如何使用'%errorlevel%'或'&'''我的批次理解水平毫无疑问是有限的。 – Cinn

+0

去ss64.com/nt,你可以找到 – SteveFest

回答

1

听起来像你正在使用Windows机器或使用Windows机器。 Power Shell可能是编写脚本的选项。在调查了Test-ConnectionTest-NetConnection之后,我遇到了这个问题,它们都是ping类型,后者让您测试一个端口是否打开。不知道是否有像这样的批处理文件命令,但Power Shell允许您使用大多数批处理命令。这两个命令都有大量的在线示例,并且在您的用例中非常易于使用。

您可能希望有一个while (true)循环运行,并定期进行ping /端口检查。这将满足您的持续检查要求。 Start-Sleep是一个cmdlet,可让您暂停脚本,您将在永久循环中执行该脚本。

您可以call batch files from Power Shellanother link from another good resource),这样如果您不想在Power Shell中重写它们,就可以重新使用现有的脚本。