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 ...
随机推荐
- YUSE_DOWN-批下载
*&---------------------------------------------------------------------**& Report YTST_CX_DO ...
- pycharm安装
license server http://idea.lanyus.com
- kernel/panic.c
/* * linux/kernel/panic.c * * Copyright (C) 1991, 1992 Linus Torvalds */ /* * This function is us ...
- 在yii中使用多个数据库
背景: 对于一个大公司拥有多个分公司的应用场景下,我们通常需要配置多个sub-database(子数据库)来存储不同的数据纪录. 配置步骤: 1.在application骨架里面的主配置文件main. ...
- Latex转换之PDF
近期一直在做如何使用latex将模板转换成PDF.现在写下在项目中如何实现. 1.首先你先进官网下载http://www.miktex.org/download.我用的是如下图所示. 在下载好的Mik ...
- 《统计推断(Statistical Inference)》读书笔记——第2章 变换与期望
第二章引入了两个重要问题,随机变量的期望和随机变量的变换.期望又引申出“矩”的概念,矩是统计学理论分析的一个重要关键词,而随机变量的变换是研究复杂统计现象的重要工具.下面是这一章的思维导图
- unity, terrain道出为obj
http://wiki.unity3d.com/index.php?title=TerrainObjExporter
- 解决Linux性能问题的前60秒
为了解决性能问题,你登入了一台Linux服务器,在最开始的一分钟内需要查看什么? 在Netflix我们有一个庞大的EC2 Linux集群,还有非常多的性能分析工具来监控和调查它的性能.其中包括用于云监 ...
- 黄聪: Bootstrap之Form表单验证神器: BootstrapValidator(转)
前言:做Web开发的我们,表单验证是再常见不过的需求了.友好的错误提示能增加用户体验.博主搜索bootstrap表单验证,搜到的结果大部分都是文中的主题:bootstrapvalidator.今天就来 ...
- 使用C#访问SQLLite
1.SQLLite如何集成在C#中 2.相关C#与SQLLite资源,及说明 3.简单示例