用PHP构建一个简易监视引擎
|
| XKER.COM 2006-10-27 10:59:43 来源:天极开发 点击: 次 |
|
|
|
注意 该构造器使用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。
|
|
上一篇教程:php高手进阶:写一个用户在线显示的程序 下一篇教程:多个字段,大量记录的插入操作技巧(PHP) |
|
【收藏本文】
【我要投稿】
【打印本文】
【论坛讨论】
【关闭窗口】 |
|
相关文章 |
|
|
| 学院文章搜索 |
|
|
|
| 推荐文章 |
|
| 阅读排行 |
|
| 专题教程 |
|
|
| 最新文章 |
|
|
|