快速业务通道

用PHP构建一个简易监视引擎

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
 <logger>emailme</logger>
   </loggers>
  </service>
 <service>
 <class>HTTP_ServiceCheck</class>
 <params>
  <description>Home Page HTTP Check</description>
  <url>http://www.schlossnagle.org/~george</url>
  <timeout>30</timeout>
  <frequency>3600</frequency>
 </params>
 <loggers>
  <logger>errorlog</logger>
 </loggers>
</service>
</services>
</config>

  当传递这个XML文件时,ServiceCheckRunner的构造器对于每一个指定的日志实例化一个日志记录程序。然后,它相应于每一个指定的服务实例化一个ServiceCheck对象。

  注意 该构造器使用Reflection_Class类来实现该服务和日志类的内在检查-在你试图实例化它们之前。尽管这是不必要的,但是它很好地演示了PHP 5中新的反射(Reflection)API的使用。除了这些类以外,反射API还提供一些类来实现对PHP中几乎任何内部实体(类,方法或函数)的内在检查。

  为了使用你构建的引擎,你仍然需要一些包装代码。监视程序应该会禁止你试图两次启动它-你不需要对每一个事件建立两份消息。当然,该监视程序还应该接收包括下列选项在内的一些选项:

选项 描述
[-f] 引擎的配置文件的一个位置,默认是monitor.xml。
[-n]  引擎允许的子进程池的大小,默认是5。
[-d]  一个停用该引擎的守护功能的标志。在你编写一个把信息输出到stdout或stderr的调试ServiceLogger进程时,这是很有用的。

  下面是最终的监视程序脚本,它分析选项,保证排它性并且运行服务检查:

require_once "Service.inc";
require_once "Console/Getopt.php";
$shortoptions = "n:f:d";
$default_opts = array(''n'' => 5, ''f'' =>''monitor.xml'');
$args = getOptions($default_opts, $shortoptions,null);
$fp = fopen("/tmp/.lockfile", "a");
if(!$fp || !flock($fp, LOCK_EX | LOCK_NB)) {
 fputs($stderr, "Failed to acquire lock\n");
 exit;
}
if(!$args[''d'']) {
 if(pcntl_fork()) {
  exit;
 }
 posix_setsid();
 if(pcntl_fork()) {
  exit;
 }
}
fwrite($fp, getmypid());
fflush($fp);
$engine = new ServiceCheckRunner($args[''f''],$args[''n'']);
$engine->loop();

  注意,这个示例使用了定制的getOptions()函数。

  在编写一个适当的配置文件后,你可以按如下方式启动该脚本:

  > ./monitor.php -f /etc/monitor.xml

  这可以保护并继续监视直到机器被关掉或该脚本被杀死。

  这个脚本相当复杂,但是仍然存在一些容易改进的地方,这些只好留给读者作为练习之用:

  · 添加一个重新分析配置文件的SIGHUP处理器以便你能够在不启动服务器的情况下改变配置。

  · 编写一个能够登录到一个数据库的ServiceLogger以用于存储查询数据。

  · 编写一个Web前端程序以为整个监视系统提供一种良好的GUI。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号