使用PHP或Javascript获取服务器状态

Get server status with PHP or Javascript?

本文关键字:服务器 状态 获取 Javascript PHP 使用      更新时间:2023-09-26

我一直在尝试让一个工作的服务器状态脚本工作,但没有成功。有一个社区自己经营一家看起来很酷的公司,我想知道是否有人能帮我?

我浏览了StackOverflow网站,但似乎大多数都不起作用。

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

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

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

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

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

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

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

只有当服务器正在使用HTTP时,从javascript进行探测才能工作。可以从错误返回的时间推断端口的状态(例如,在谷歌上搜索"portscan javascript"),但同样,除非你知道网络和服务器是如何配置的,否则结果不会是决定性的。