当社は 100 を超えるサーバーを管理しており、http を使用して 1 日に 1 回か 2 回、基本的な使用状況に関する情報をこれらのサーバーに「問い合わせ」たいと考えています。使用情報は perl cgi スクリプトで簡単に見つけることができます。スクリプトの作成とテストを容易にする http インターフェースが必要です。Apache や nginx+fcgiwrap で 1 日に 1 つか 2 つのリクエストを処理するのはやり過ぎのようです。私たちは、openbsd-inetd (すべてのサーバーに既にインストールされています) を使用して、要求を perl cgi スクリプトに簡単に渡して終了できる Web サーバーを起動することを考えていました。これを行うための良い代替手段は何ですか?
私はこれperlscript.pl
を機能させることができましたが、それが正しいアプローチであるかどうかはわかりません。
#!/usr/bin/perl
use strict;
use warnings;
{
package BackupWebServer;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
my %dispatch = (
'/hello' => \&resp_hello
);
sub net_server { 'Net::Server::INET' }
sub handle_request {
my $self = shift;
my $cgi = shift;
my $path = $cgi->path_info();
my $handler = $dispatch{$path};
if (ref($handler) eq "CODE") {
print "HTTP/1.0 200 OK\r\n";
$handler->($cgi);
} else {
print "HTTP/1.0 404 Not found\r\n";
print $cgi->header,
$cgi->start_html('Not found'),
$cgi->h1('Not found'),
$cgi->end_html;
}
}
sub resp_hello {
my $cgi = shift; # CGI.pm object
return if !ref $cgi;
my $who = $cgi->param('name');
print $cgi->header,
$cgi->start_html("Hello"),
$cgi->h1("Hello $who!"),
$cgi->end_html;
}
}
BackupWebServer->new()->run(
log_file => 'Sys::Syslog',
user => 'root',
group => 'root'
);
持つinetd.conf
ことで
8901 stream tcp nowait root /home/perl/scriptname.pl