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 ...
随机推荐
- python数据结构与算法——图的最短路径(Dijkstra算法)
# Dijkstra算法——通过边实现松弛 # 指定一个点到其他各顶点的路径——单源最短路径 # 初始化图参数 G = {1:{1:0, 2:1, 3:12}, 2:{2:0, 3:9, 4:3}, ...
- Neo4j Index Notes
Motivation GraphDatabasesBook: Robinson I., Webber J., Eifrem E. Graph Databases. 2013. 这本该是入门概念性质的书 ...
- android之ActionBar
最近忙着做项目了,很久么来博客园看看了.最近项目中用到了actionbar,那就依我个人之建,来跟大家谈谈吧. 首先最重的是看你自己所见的项目的最小Api是为11,(在设置Minsdkversion最 ...
- OpenMP对于嵌套循环应该添加多少个parallel for 分类: OpenMP C/C++ Linux 2015-04-27 14:48 53人阅读 评论(0) 收藏
一个原则是:应该尽量少的使用parallelfor, 因为parallel for也需要时间开销.即: (1)如果外层循环次数远远小于内层循环次数,内层循环较多时,将parallel for加在内层循 ...
- 我终于搞清楚为什么谷歌地图获取到的联通3G基站与大家手头的基站表不同了
我终于搞清楚这个问题了,大家使用谷歌地图手机版.MobileTrack以及网优用的FieldTest获取到的WCDMA基站Cellid为什么不是大家手头的CellTrack91或基站表里的数字了... ...
- Node.js热部署方式
1. supervisor: 2. hotnode: 3. node-dev: 4. nodemon:
- Lambda表达式的演化,委托-匿名方法-Func-Lambda
匿名方法 很多时候委托接收的方法是一次性的或者方法体是非常简单的... 例三: 我们可以写成: 有没有发现我们每次都要定义委托,很多时候签名可能是一样的.这样就没有必要定义重复的. 然后又过了很久很久 ...
- SeedDms 文档管理系统安装
在xampp下安装SeedDms 1.下载seeddms-quickstart-4.3.24.tar.gz,解压出来三个目录 \data\ \pear\ \seeddms-4.3.24\ 我把seed ...
- win7以管理员身份运行bat提示系统找不到指定的路径。
windows7“以管理员身份运行”bat提示“系统找不到指定的路径.” 使用批处理安装服务,直接双击运行没有权限,右键“以管理员身份运行”却提示“系统找不到指定的路径.”,反复查看路径是正确的. 打 ...
- shell 初学者 必读 ,强烈推荐新手读
背景: 很多人从C/C++转化而来,看了学习文档之后,踩入了很多坑 1 对变量赋值 不要有空格 a=123 # 正确 a = 123 # 错误 2 if语句 [] 要留有空格,变量最好加" ...