【问题标题】:Get server status with PHP or Javascript?使用 PHP 或 Javascript 获取服务器状态?
【发布时间】:2016-05-09 08:19:20
【问题描述】:

我一直试图让一个工作服务器状态脚本工作,但没有任何成功。有一个自己运营的社区,看起来很酷,我想知道是否有人可以帮助我?

我查看过 StackOverflow 网站,但似乎大多数都不起作用。

【问题讨论】:

  • 你能告诉我们你到目前为止做了什么吗?
  • 制作了一个 pastebin,因为我无法在回复 pastebin.com/Htsh0FkD 中发布整个代码
  • 服务器状态是指检查它是否在线?或任何其他状态,如超载等?
  • 是的,检查它是在线还是离线。
  • @Aberidius 您可能希望为此使用xpaw/php-source-query-class,因为您无法确定服务器是否响应 ping。这个库是专门为源服务器制作的。 There's an example here.

标签: javascript php


【解决方案1】:

使用 PHP,您可以使用 shell_exec 命令有效地 ping 特定 IP,然后确定它是否在线。如果后端在 Linux 上运行,这应该可以工作:

$offline = shell_exec("ping -c 1 8.8.8.8 | grep -c '0 received'");

如果离线,或者第一个数据包丢失,上面将返回1,如果在线或收到第一个数据包,则返回0。它不考虑丢包。

另一种选择是注册一个实际可靠且冗余的监控服务,该服务具有 API,并通过该 API 将状态获取到您的站点。根据您的实际需要,这可能会更加可靠。

【讨论】:

  • No need to use shell_exec if you can avoid it。还有一个作曲家包使用exec 或套接字进行ping:geerlingguy/Ping
  • @h2ooooooo 我认为没有理由更喜欢exec 而不是shell_exec。对于网络的实际监控,而不是特定的服务器,ICMP 请求也远比套接字可靠。
  • 绝对没有理由更喜欢 exec 而不是 shell_exec 但据您所知,OP 正在尝试复制 IP,并且只需要一个省略的 escapeshellarg 即可打开您的服务器任何愿意的人。套接字部分还发送一个实际 ICMP 数据包,因此不能说它们比套接字更可靠,因为它 只是一个套接字。如果有疑问,我相信wiki page on ICMP 会告诉你它是如何构造的。
  • @h2ooooooo 我假设 OP 控制shell_exec 的输入 - 但假设当然是危险的。至于套接字,我以为您指的是fsockopen 感到困惑,这在服务监控方面比网络监控更有优势。好东西,谢谢你的澄清!
  • 啊,那完全有道理。该库支持fsockopen,但正如您自己提到的,它不是ICMP。 OP 当然必须使用->ping('socket') 来避免execfsockopen
【解决方案2】:

通过按需脚本从脚本轮询服务器状态通常是一个非常糟糕的主意。在对您的脚本有很高需求的地方,您将无休止地探测服务器(我们稍后会回到“ping”),这充其量是非常低效的,并且很容易被利用来对服务器发起反射式拒绝服务攻击。无论流量如何,响应时间都会非常慢,因为每个实例都会轮询每个服务器。如果服务器不可用,那么情况会变得更糟,因为您需要等待超时来确定其状态(浏览器为此使用自适应超时而不是操作系统默认值)。

更好的解决方案是安排探测以检查状态 - 这就是 BMC Patrol 和 Nagios 等工具用于服务监控的方式。

关于轮询服务的方法,而 通常 如果你不能 ping 一个节点,那么你将无法访问它应该提供的服务,确实如此并不意味着如果您可以 ping 一个服务器,您就可以访问它的服务。在服务套接字上执行 TCP 握手将更准确地描述服务是否可用。但是,如果您在不交换任何数据的情况下反复连接到其他人的服务器,这可能会被管理员视为拒绝服务攻击,因此您的 IP 将被列入黑名单。也就是说,您可能应该与运行服务器的人交谈(如果不是您自己)。

只有当服务器正在使用 HTTP 时,从 javacript 进行的探测才会起作用。可以推断一个端口的状态,从错误返回所需的时间开始(对于某些示例,请使用 google 搜索“portscan javascript”),但结果也不会是确定的,除非你知道网络和服务器是如何配置的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2017-06-22
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多