我正在创建一个游戏服务器列表,我想测量某些服务器的正常运行时间(具体来说,正常运行时间应该以百分比显示)。
我为我的脚本配置了一个 cronjob,它每 5 分钟检查一次服务器是否启动或关闭,因此我可以轻松获取服务器状态。
我需要了解如何根据上述数据测量每台服务器的正常运行时间。我必须在脚本执行的每一分钟为每台服务器节省停机时间和开机时间?
如果您不关心许多细节,而只需要上下班时间。然后,您可以在一个文件中保存 2 个数字,一个是当前百分比,另一个是脚本采取的当前措施数。
例如:“96 800”。
然后,每当执行脚本时,使用这个公式,假设百分比(96)为 X,保存次数为 Y(800),当前度量为 Z(0 或 1)
X=X/100;
X=(X*Y+Z)/(Y+1); //You get the new value of the percentage, X. Be careful as they need to be long values.
Y=Y+1; //And the current number of interactions.
X=X*100;
这当然只是伪代码,不会立即起作用,只是为了让您了解一种方法。您还必须包括一种读取文件并将其保存在包含这 2 个数字的页面的任何位置的方法。
正如 Jamie 所说,这是假设尽管服务器已关闭,但 crontime 仍在工作。
PS,您也可以从其他服务器添加一个系统来检查该服务器的正常运行时间,但它需要进行统计计算(当添加许多其他服务器时,误差趋于 0,但这太难了)还需要考虑其他服务器的正常运行时间......
你可以解析/proc/uptime
文件。它是 Linux 上的文本文件(您应该按顺序阅读),提供服务器机器的正常运行时间:
% cat /proc/uptime
129657.69 506917.57
proc(5)手册页中的更多详细信息。
PS。/proc/
读取文件系统(使用伪文件)时不涉及真正的磁盘 IO 。所以读起来真的很快。
您是在谈论 Apache 服务器还是整个计算机服务器?如果您只监控 Apache:
如果您想监控整个系统,cronjobs 可能有点徒劳,因为如果它们的主机操作系统关闭,它们将不会运行。在这种情况下,服务器日志应该包含您需要的所有信息。
您的问题不清楚。如果您想获取远程服务器正常运行时间统计信息,SSH 是一个选项。在一个服务器中安排 cron 脚本,该脚本将远程检查其他服务器的正常运行时间。
如果您的“游戏服务器”在实际的 unix 或 linux 虚拟机中运行,一个更好的主意可能是测量 ACTUAL 服务器正常运行时间。
在类 Unix 操作系统中,您有一个名为 的命令uptime
:
[ghoti@pc ~]$ uptime
6:37PM up 10 days, 1:26, 52 users, load averages: 0.26, 0.35, 0.34
[ghoti@pc ~]$
如果您有能力从 PHP 执行 shell 命令,那么您可以将此输出捕获到 PHP 中的变量并对其进行解析以确定实际的服务器正常运行时间。随时随地记录,但最喜欢的方法之一是使用RRDTool图表。RRD 是数据库格式,然后您可以使用Munin或Cacti等工具来构建图形。可能比正常运行时间更有趣!
另一方面,如果您还希望能够在他们的服务器离线时自动通知人们,并且您希望灵活地监控任何类型的服务(HTTP、SMTP、虚幻服务器等),请查看工具像Nagios或Icinga。