【问题标题】:Restart server based on ping response根据 ping 响应重启服务器
【发布时间】:2023-11-14 12:53:02
【问题描述】:

我是根据本网站上其他问题/答案的混搭以及在 ss64.com 上找到的内容创建的

我已经把它锤炼成我想要的,现在它只是一个关键的缺失细节,它会让它一遍又一遍地循环直到建立连接,同时避免不断地启动每个服务器上的服务器循环。

它被大量过度设计和可怕地制作,但它基本上是我所学的所有知识的巅峰之作,只是以我能理解的方式解决它。

目前的主要问题是,如果丢包率低于 100%,它会启动服务器,即使丢包率为 80%,这对于任何连接或功能来说都太高了。

我正在寻找那个关键命令,以确保服务器仅在有 100% 连接时才会启动,并确保它不会在有 100% 连接的情况下继续启动服务器循环(这种情况已经发生太多次了,运行 50 个服务器实例真的是 PC 杀手)。

这就是我所拥有的(不要笑得太厉害)。

@echo off 
title Server Restart
color 0A
cls
:start
Cls
set ip=xxx.xx.xxx.xx

:ping
ping %ip% -n 5 || goto PingFail
timeout /t 8
cls
echo Ping was Successful to %ip% at %date% %time%
timeout /t 10
ping %ip% -n 5 -w 5000 && goto start
echo Moving To PingFail...
goto PingFail


:Starting
Echo Connection Established... Starting server
**Start Server.bat**
Echo Start Successful
goto start


:PingFail
cls
Echo Connection Has Failed.. looping.
timeout /t 3
goto Pingloop


:Pingloop
echo PINGLOOPING
ping %ip% -n 5 || goto Pingloop
timeout /t 15
goto Starting

【问题讨论】:

  • 您能否提供更多关于“服务器”的详细信息以及您 ping 的机器以及您要 ping 的 IP?只需使用示例 IP 地址。我们需要知道您当前的设置是什么。
  • 这是一台家用 PC ping 我的可见公共 IP。服务器是从一个名为“server.bat”的批处理文件中启动的,它刚刚以-batchmode 和-nographics 附件启动游戏。如果您继续打开 Server.bat,它将启动多个窗口。他们都将从我的 IP 运行一个活动服务器。 (因此需要确保它仅在建立 Internet 连接时才打开服务器)老实说,它应该具有关闭相同类型的现有进程的功能。
  • 这是一个使用更改的 IP 运行的示例。 i.gyazo.com/fe2541419f88d2ff728429cf8d39a98c.png

标签: loops batch-file ip ping restart


【解决方案1】:

我们在谈论什么样的服务器?而且您知道大多数防火墙默认会阻止 ping 请求,对吗? 您可以使用:https://uptimerobot.com/ 并使用他们的 API 来获取有效信息。

如果您想确定您与外界的连接,您可以像这样检查 0% 丢失:

ping -n 1 -4 www.google.com | grep "0% loss"

我从未见过 80% 或 60% 的损失,但您当然可以将 0% 更改为任何百分比。虽然 ping 您自己的公共 IP 并不意味着您有可用的互联网连接。您需要 ping 通“世界”而不是您的家。

【讨论】:

  • 你好,这是一个非常简单的小游戏的简单服务器。我的防火墙已畅通无阻(实际上已完全禁用)。由于服务器使用直接 IP 连接,因此 ping 正在 ping 我自己的公共 IP 地址。
  • 等什么?你在ping自己?哦,您的意思是,您正在检查您是否有可用的互联网连接或...?
  • 是的,我的想法是我可以让批处理继续进行,它会继续 ping 寻找网络丢弃,然后当它确实丢弃时,检查它直到建立连接,此时它将开始服务器自己。理论上听起来很简单,对吧?我知道我可以使用第 3 方软件并获得相同的结果,但这对我来说主要是一个学习练习以及功能性。
  • 嘿!感谢那。现在 ping google.com 似乎很明显,但我假设它会在 ping 公共 IP 地址时工作相同,当它实际上从公共 IP 接收数据包时开始抓挠 - 互联网关闭。但是,我似乎无法让“grep 0% loss”正常工作。这是我目前的工作方式。timeout /t 5 ping %ip% -n 5 -w 3000 | grep "0% loss" timeout /t 15 goto Starting %ip% 指向 www.google.com。
  • 嗨@Cinn 你在运行什么操作系统? timeout /t 5 在哪里?您对 Google 的 ping 操作不应超过 3 次。他们并不介意,但您只需要 3 个即可进行良好验证。您也可以删除 -w 3000。这里不需要它,您不觉得吗?或者你有一个非常旧的互联网连接? ping -4 www.google.com -n 3 | find /i "0%" 这似乎适用于 Windows。