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 ...
随机推荐
- Event List 2
The list of events can be found in src/switch_event.c in a char array called EVENT_NAMES and is summ ...
- ABBYY如何使用电子邮件发送OCR结果
ABBYY FineReader作为一款OCR图文识别软件,在识别文档之后,可以以任何受支持的格式(除HTML外),通过电子邮件发送识别结果,不仅可以发送文档,还可以发送页面图像,本文将为大家讲解如何 ...
- android四大组件之ContentProvider(一)
ContentProvider学习笔记 1. ContentProvider基本概念 ContentProvider向我们提供了我们在应用程序之间共享数据的一种机制,虽然采用文件和SharedPref ...
- linux 中printf的使用
linux 中printf的使用printf "helloworld\n"printf 中换行必须加上\n printf '%d %s\n' 1 "abc" c ...
- fastboot 重启到recovery
要使用adb命令,手机需要打开USB debug. 安装软件 adb install apk文件名称.apk 重新安装该软件 adb install -r apk文件名称.apk 卸载apk软件 ad ...
- 【mysql】压缩myisam数据表
myisam引擎介绍 存储结构: MyISAM每张表被存放在三个文件: frm:表格定义: MYD(MYData):数据文件: MYI(MYIndex):索引文件: 存储空间: MyISAM可被压 ...
- 外联css及js的使用
结构图如下: html如下: <!DOCTYPE html> <html> <head> <title>button test</title> ...
- CSS组件架构的设计思想
不管是设计思想,还是架构,都可以总结为一个词:AO模式.A表示Append,即“附加”的意思,O表示Overwrite,即“重写”的意思.所有的CSS组件都是沿用这种思想来设计的.这也是CSS的特性, ...
- 关于@Html.Action()的异常“控制器或该控制器未实现 IController。”
解决之前: @Html.Action("BottomHelp", "Articles", new { num = 5}) 解决之后: @Html.Action( ...
- Spark往Elasticsearch读写数据
def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setAppName("DecisionTre ...