2014-02-14 37 views
1

我們公司管理着超過100臺服務器,我們希望每天使用http「一次或兩次」詢問這些服務器的基本使用信息。使用信息可以很容易地通過perl cgi腳本找到,我們希望有一個http接口來簡化腳本的創建和測試。使用apache或者甚至nginx + fcgiwrap來每天提供一個或兩個請求似乎是一件多餘的事情。我們考慮使用openbsd-inetd(已經安裝在所有服務器上)來啓動一個Web服務器,它可以很容易地將請求傳遞給perl cgi腳本並退出。有什麼好的選擇來做到這一點?每天使用perl cgi服務少於10個http請求的最有效的方法

我設法得到這個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' 
    ); 

採用具有

8901 stream tcp  nowait root /home/perl/scriptname.pl 
+0

看看這裏:http://stackoverflow.com/questions/42/simplest-way-to-host-html/21321291#21321291 –

+2

它可能是矯枉過正,但Apache也很簡單,因爲它很容易安裝,支持和配置。無論如何,大多數時間都在運行一個閒置的Apache實例真的如此大的性能?我不這麼認爲。而且,在易於設置和維護的東西中,有一個貨幣價值,而對比一個更復雜的家庭解決方案,只需節省幾MB。 – TypeIA

+1

幾MB的磁盤空間。如果需要RAM,一個未使用的deamon將最終交換出來。 – ikegami

回答

2

如果你不想一個守護進程添加到這些機器的inetd.conf,那麼你就必須使用現有的一個。我認爲SSH已安裝?我會用它。無論如何,這可能是一個更安全的使用HTTP的解決方案。

+1

如果你不想要,你甚至不需要在遠程系統上安裝腳本。你可以在沒有參數的情況下執行'perl',並通過套接字將腳本提供給它的STDIN。 – ikegami

+0

我正在考慮使用inetd ...來運行perl cgi腳本。 – rmarimon

+0

CGI是一個進程和它的孩子之間進行通信的有限手段。這在這裏沒有幫助。你必須做很多工作才能建立一個你甚至不需要的環境。也許你的意思是你會使用'application/x-www-form-urlencoded'來傳遞請求和/或響應的信息,但是JSON會更容易。 – ikegami

相關問題