为了使用你构建的引擎,你仍然需要一些包装代码。监视程序应该会禁止你试图两次启动它-你不需要对每一个事件建立两份消息。当然,该监视程序还应该接收包括下列选项在内的一些选项:
|
选项
|
描述
|
|
[-f]
|
引擎的配置文件的一个位置,默认是monitor.xml。
|
|
[-n]
|
引擎允许的子进程池的大小,默认是5。
|
|
[-d]
|
一个停用该引擎的守护功能的标志。在你编写一个把信息输出到stdout或stderr的调试ServiceLogger进程时,这是很有用的。
|
下面是最终的监视程序脚本,它分析选项,保证排它性并且运行服务检查:
注意,这个示例使用了定制的getOptions()函数。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();
在编写一个适当的配置文件后,你可以按如下方式启动该脚本:
> ./monitor.php -f /etc/monitor.xml
这可以保护并继续监视直到机器被关掉或该脚本被杀死。
这个脚本相当复杂,但是仍然存在一些容易改进的地方,这些只好留给读者作为练习之用:
· 添加一个重新分析配置文件的SIGHUP处理器以便你能够在不启动服务器的情况下改变配置。
· 编写一个能够登录到一个数据库的ServiceLogger以用于存储查询数据。
· 编写一个Web前端程序以为整个监视系统提供一种良好的GUI。