nginx环境下配置nagios-关于perl-fcgi.pl
配置文件如下:
请注意,网上提供的官方文档在运行时可能会出现问题,此文中保证无问题。
1 #!/usr/bin/perl
2 #
3 # author Daniel Dominik Rudnicki
4 # thanks to: Piotr Romanczuk
5 # email daniel@sardzent.org
6 # version 0.4.
7 # webpage http://www.nginx.eu/
8 #
9 # BASED @ http://wiki.codemongers.com/NginxSimpleCGI
10 #
11 #
12 # use strict;
13 use FCGI;
14 use Getopt::Long;
15 use IO::All;
16 use Socket;
17
18 sub init {
19 GetOptions( "h" => \$help,
20 "verbose!"=>\$verbose,
21 "pid=s" => \$filepid,
22 "l=s" => \$logfile,
23 "S:s" => \$unixsocket,
24 "P:i" => \$unixport) or usage();
25 usage() if $help;
26
27 print " Starting Nginx-fcgi\n" if $verbose;
28 print " Running with $> UID" if $verbose;
29 print " Perl $]" if $verbose;
30
31 # if ( $> == "" ) {
32 # print "\n\tERROR\tRunning as a root!\n";
33 # print "\tSuggested not to do so !!!\n\n";
34 # exit ;
35 # }
36
37 if ( ! $logfile ) {
38 print "\n\tERROR\t log file must declared\n"
39 . "\tuse $0 with option -l filename\n\n";
40 exit ;
41 }
42 print " Using log file $logfile\n" if $verbose;
43 "\n\n" >> io($logfile);
44 addlog($logfile, "Starting Nginx-cfgi");
45 addlog($logfile, "Running with $> UID");
46 addlog($logfile, "Perl $]");
47 addlog($logfile, "Testing socket options");
48
49 if ( ($unixsocket && $unixport) || (!($unixsocket) && !($unixport)) ) {
50 print "\n\tERROR\tOnly one option can be used!\n";
51 print "\tSuggested (beacuse of speed) is usage UNIX socket -S \n\n";
52 exit ;
53 }
54
55 if ($unixsocket) {
56 print " Daemon listening at UNIX socket $unixsocket\n" if $versbose;
57 addlog($logfile, "Deamon listening at UNIX socket $unixsocket");
58 } else {
59 print " Daemon listening at TCP/IP socket *:$unixport\n" if $verbose;
60 #
61 addlog($logfile, "Daemon listening at TCP/IP socket *:$unixport");
62 }
63
64 if ( -e $filepid ) {
65 print "\n\tERROR\t PID file $filepid already exists\n\n";
66 addlog($logfile, "Can not use PID file $filepid, already exists.");
67 exit ;
68 }
69
70 if ( $unixsocket ) {
71 print " Creating UNIX socket\n" if $verbose;
72 $socket = FCGI::OpenSocket( $unixsocket, );
73 if ( !$socket) {
74 print " Couldn't create socket\n";
75 addlog($logfile, "Couldn't create socket");
76 exit ;
77 }
78 print " Using UNIX socket $unixsocket\n" if $verbose;
79 } else {
80 print " Creating TCP/IP socket\n" if $verbose;
81 $portnumber = ":".$unixport;
82 $socket = FCGI::OpenSocket( $unixport, );
83 if ( !$socket ) {
84 print " Couldn't create socket\n";
85 addlog($logfile, "Couldn't create socket");
86 exit ;
87 }
88 print " Using port $unixport\n" if $verbose;
89 }
90 addlog($logfile, "Socket created");
91
92 if ( ! $filepid ) {
93 print "\n\tERROR\t PID file must declared\n"
94 . "\tuse $0 with option -pid filename\n\n";
95 exit ;
96 }
97 print " Using PID file $filepid\n" if $verbose;
98 addlog($logfile, "Using PID file $filepid");
99
my $pidnumber = $$;
$pidnumber > io($filepid);
print " PID number $$\n" if $verbose;
addlog($logfile, "PID number $pidnumber");
}
sub addzero {
my ($date) = shift;
if ($date < ) {
return "0$date";
}
return $date;
}
sub logformat {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$iddst) = localtime(time);
my $datestring;
$year += ;
$mon++;
$mon = addzero($mon);
$mday = addzero($mday);
$min = addzero($min);
$datestring = "$year-$mon-$mday $hour:$min";
return($datestring);
}
sub addlog {
my ($log_file, $log_message) = @_;
my $curr_time = logformat();
my $write_message = "[$curr_time] $log_message";
$write_message >> io($log_file);
"\n" >> io($log_file);
}
sub printerror {
my $message = @_;
print "\n Nginx FastCGI\tERROR\n"
. "\t $message\n\n";
exit ;
}
sub usage {
print "\n Nginx FastCGI \n"
. "\n\tusage: $0 [-h] -S string -P int\n"
. "\n\t-h\t\t: this (help) message"
. "\n\t-S path\t\t: path for UNIX socket"
. "\n\t-P port\t\t: port number"
. "\n\t-p file\t\t: path for pid file"
. "\n\t-l file\t\t: path for logfile"
. "\n\n\texample: $0 -S /var/run/nginx-perl_cgi.sock -l /var/log/nginx/nginx-cfgi.log -pid /var/run/nginx-fcgi.pid\n\n";
exit ;
}
init;
exit unless $@ =~ /^fakeexit/;
} ;
# fork part
my $pid = fork();
if( $pid == ) {
&main;
exit ;
}
print " Forking worker process with PID $pid\n" if $verbose;
addlog($logfile, "Forking worker process with PID $pid");
print " Update PID file $filepid\n" if $verbose;
addlog($logfile, "Update PID file $filepid");
$pid > io($filepid);
print " Worker process running.\n" if $verbose;
addlog ($logfile, "Parent process $$ is exiting");
exit ;
sub main {
$request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );
if ($request) { request_loop()};
FCGI::CloseSocket( $socket );
}
sub request_loop {
while( $request->Accept() >= ) {
# processing any STDIN input from WebServer (for CGI-POST actions)
$stdin_passthrough = '';
$req_len = + $req_params{'CONTENT_LENGTH'};
if (($req_params{'REQUEST_METHOD'} eq 'POST') && ($req_len != ) ){
while ($req_len) {
$stdin_passthrough .= getc(STDIN);
$req_len--;
}
}
# running the cgi app
if ( (-x $req_params{SCRIPT_FILENAME}) &&
(-s $req_params{SCRIPT_FILENAME}) &&
(-r $req_params{SCRIPT_FILENAME})
){
foreach $key ( keys %req_params){
$ENV{$key} = $req_params{$key};
}
if ( $verbose ) {
addlog($logfile, "running $req_params{SCRIPT_FILENAME}");
}
# http://perldoc.perl.org/perlipc.html#Safe-Pipe-Opens
#
#open $cgi_app, '-|', $req_params{SCRIPT_FILENAME}, $stdin_passthrough or print("Content-type: text/plain\r\n\r\n"); print "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n"; # addlog($logfile, "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !");
open $cgi_app, '-|', "echo '$stdin_passthrough' | '$req_params{SCRIPT_FILENAME}'" or print("Content-type: text/plain\r\n\r\n"); print "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n"; # addlog($logfile, "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !");
if ($cgi_app) {
print <$cgi_app>;
close $cgi_app;
}
} else {
print("Content-type: text/plain\r\n\r\n");
print "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.\n";
addlog($logfile, "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.");
}
}
}
221
nginx环境下配置nagios-关于perl-fcgi.pl的更多相关文章
- nginx环境下配置nagios-关于nagios配置文件nginx.conf
		接上文:nginx环境下配置nagios-关于nginx.conf 配置如下: ; location ~ .*\.(php|php5)?$ { ... 
- nginx环境下配置nagiosQL-关于nagiosql配置文件
		接上文:nginx环境下配置nagios-关于nginx.conf nagiosql文件应该处于conf/domain/目录下 nagiosql配置如下: ; gzi ... 
- Nginx环境下配置PHP使用的SSL认证(https)
		最近一段时间发现好多网站都从http协议变成了加密的https协议,比如说百度.吾志等等.https看起来比http高端了好多,而且在不同的浏览器向上还会显示出不同于http的URL展示效果(比如说c ... 
- nginx环境下搭建nagios 3.5.0,及配置pnp4nagios画图
		本文基于<LNMP最新源码安装脚本>,Nagios依赖PHP环境和perl环境,由于Nginx不支持Perl的CGI,需先来搭建Perl环境,Nagios原理介绍略.一.下载最新稳定源码包 ... 
- <nginx+PHP>nginx环境下配置支持php7
		[root@redhat7 ~]# wget http://am1.php.net/get/php-7.1.2.tar.gz/from/this/mirror [root@redhat7 ~]# ta ... 
- nginx环境下配置nagios-关于start_perl_cgi.sh
		>/dev/ rm $dir/logs/perl-fcgi.sock >/dev/ echo } start () { rm $dir/now_start_perl_fcgi. ... 
- 如何在 Linux 环境下配置 Nagios Remote Plugin Executor (NRPE)
		为 NRPE 配置自定义命令 远程服务器上安装 下面列出了一些可以用于 NRPE 的自定义命令.这些命令在远程服务器的 /etc/nagios/nrpe.cfg 文件中定义. ## 当 1.5.15 ... 
- phpmyadmin在nginx环境下配置错误
		location ~ \.css { add_header Content-Type text/css; } location ~ \.js { ... 
- nginx环境下配置nagios-关于commands.cfg
		-w $ARG1$ -c $ARG2$ -M -b% -c % -f% -c % -f% -c % -f # define command{ command_name chec ... 
随机推荐
- java 读写JSON(一)
			算是第一次正式接触Json,没有深入研究,先贴上java的代码,日后才说! package priv.chenhy.datehandle; import java.io.BufferedReader; ... 
- UVA 11235 频繁出现的数值 RMQ
			题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ... 
- 当pip install不能正确安装的时候,try easy_install
			当pip install不能正确安装的时候,try easy_install 重复试了几次pip install -r requirements.txt,都在安装pillow的时候失败了,想找这个枕头 ... 
- 【转载】ANSYS动力学分析-瞬态分析
			原文地址:http://www.cnblogs.com/ylhome/archive/2009/12/02/1615172.html 三种求解方法 瞬态动力学分析可采用三种方法:完全(Full)法.缩 ... 
- ABBYY FineReader自定义工作区的方法
			ABBYY FineReader作为一款OCR图文识别软件,界面具有用户友好性和直观性,以结果为导向,可以在不进行任何其他培训的情况下使用该程序,新用户可以迅速掌握主要功能,轻松自定义程序的界面,接下 ... 
- UIAutomator定位Android控件的方法
			UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ... 
- CenOS 7 安装mysql
			1:安装YUM源 2:利用file zilla 将mysql文件拖放到 /var/opt 目录下 3:在centos当中,已经将mysql的文件放到了 /var/opt 我们只需要安装就可以 安装 ... 
- 【python】删除1~100的素数
			def delPrime(x): if x==1: return True for y in range(2,x): if x%y==0: return True return False x1=ra ... 
- HackerRank "Square Subsequences" !!!
			Firt thought: an variation to LCS problem - but this one has many tricky detail. I learnt the soluti ... 
- oracle数据库对象使用说明
			1.创建一个分区表,并插入一些数据,同时查询出每个分区的数据. 答:创建分区表如下 2.创建一个视图,并给出一个查询语句. 3.在当前用户下创建一个同义词,用于查询scott用户下的dept表,并给出 ... 
