【发布时间】: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 的输出暂时不起作用。
目标:
Ping 以查看是否可以访问特定 IP(可能还有端口)。
如果它们无法访问,请关闭 Server.exe
的所有当前实例
继续 ping直到特定 IP可访问。
一旦 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