* /server-status - Returns page using tables
* /server-status?notable - Returns page for browsers without table support
* /server-status?refresh - Returns page with 1 second refresh
* /server-status?refresh=6 - Returns page with refresh every 6 seconds
* /server-status?auto - Returns page with data for automatic parsing
#!/usr/bin/perl
use strict;
use HTML::TableExtract;
# PATH to "curl" utility
my $CURL = "/usr/bin/curl";
# URL of the server-status we want to process
my $STATUS_URL = "http://localhost/server-status";
# those are the headers in the first row of the table we want to extract
# Used by HTML::TableExtract to search for our table, within the whole HTML output
my $headers =['Srv','PID','Acc','M','CPU','SS','Req','Conn','Child','Slot','Client','VHost','Request'];
# Let's fetch the status page...
my $output = `$CURL -s $STATUS_URL`;
# Let's search for our table within the HTML...
my $tables = HTML::TableExtract->new( headers => $headers );
# We found it (hopefully), so let's parse it...
$tables->parse($output);
# ...and let's stick to the first one
my $status_table = $tables->first_table_found;
# Now let's loop allover the rows...
foreach my $row_ref ($status_table->rows) {
# Let's de-reference the ARRAY reference, so to better manager
# the various elements...
my @row = @$row_ref;
# Let's check for an OPTIONS row...
if ($row[12]=~/OPTIONS/) {
# simply skip to next row in the loop
next;
}
# Let's choose whatever columns we want (first column has index "0")
# So here we have Srv, PID, Client and Request
foreach my $column (0,1,10,12) {
print $row[$column]."|";
}
print "\n";
}
除了重新编译mod_status以满足您的需要(这可能听起来有点矫枉过正,但......它仍然可行),mod_status提供了一个专门为机器可读处理设计的选项。根据官方文档:
因此,捕获 mod_status 的输出就像调用wget、curl或任何其他可以在您的应用程序中启动/包含的 http 客户端库一样简单,以满足您的需要。
不幸的是,我刚刚发现,当使用“?auto”格式时, ExtendedStatus 指令提供的大部分附加信息都没有显示出来!这意味着使用“?auto”选项,您无法访问进程列表。
由于听起来有点奇怪,我检查了mod_status模块的源代码。除了附加且未记录的“?notable”选项外,“ apache2-2.2.22/modules/generators/mod_status.c ”(我的 Ubuntu 12.04 LTS 笔记本)中的源代码包括:
(顺便说一句:我发现阅读“?notable - 返回不支持表格的浏览器的页面”既有趣又好奇,因为我太老了/太古老了记得网络的早期,表格支持是可用浏览器的新功能!)
我还检查了“?auto”格式中缺少的进程列表是一个设计特性:
如您所见,您需要的是最后一个“if”的“else”部分。因此,它不包含在“?auto”格式中,因为在这种情况下,我们属于“short_report”的情况。
因此,在完成上述所有操作之后,回到您的问题:“是否有任何调整、选项或标志来隐藏这些 OPTIONS 进程? ”,我的回答是,您唯一的选择是“调整”一个小应用程序:
由于我对 PERL 很满意,并且对 HTML::TableExtract模块有一些运气,因此您可以使用以下良好基础:
就我而言,上面的脚本产生以下输出:
你可以看到,跳过 OPTIONS 行。
请注意,上述应用程序缺乏基本的错误处理,所以....如果出现问题,请不要怪我:-)