【问题标题】:Batch server ping and restart for a game批量服务器 ping 并重新启动游戏
【发布时间】:2017-07-21 00:25:29
【问题描述】:

只是为(最初是一个 Minecraft 服务器,尽管它现在不使用它)寻找这个自相残杀的重启代码的更正/添加。

 @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. Ping 以查看是否可以访问特定 IP(可能还有端口)。

  2. 如果它们无法访问,请关闭 Server.exe

  3. 的所有当前实例
  4. 继续 ping直到特定 IP可访问。

  5. 一旦 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

非常欢迎您的所有帮助和 cmets。我试图尽可能地概括这一点以使其简单,因此可以为任何其他可能在任何应用程序中使用它的人进行更改。

【问题讨论】:

  • 首先:在ping 命令中不需要@。其次,您可以使用&| 运算符来检测ping 是否成功。你也可以试试%errorlevel%变量。
  • @SteveFest 抱歉,我不太明白,我将在哪里/如何使用 %errorlevel%& | 我的批次理解水平无疑是有限的。
  • 去 ss64.com/nt 你可以找到这些
  • @SteveFest 我明白了,我可能还不够清楚,我很抱歉。这是确定它是否已成功执行 ping 命令。不是返回 ping 本身是否成功。例如,发送数据包 x1 // 接收数据包 x1 = 丢失 0 或发送数据包 x1 // 未接收数据包 x1 = 丢失 1
  • 好吧。或者,您可以使用for循环来检索命令结果,您可以确定是否ping成功(失败的ping带有特定的文本,您可以检查ping结果是否带有该文本。)

标签: batch-file server ping restart


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多