nginx环境下配置nagios-关于perl-fcgi.pl

配置文件如下:

请注意,网上提供的官方文档在运行时可能会出现问题,此文中保证无问题。

1 #!/usr/bin/perl
  2 #
  3 #       author          Daniel Dominik Rudnicki
  4 #       thanks to:      Piotr Romanczuk
  5 #       email           [email protected]
  6 #       version         0.4.3
  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 ( $> == "0" ) {
 32 #               print "\n\tERROR\tRunning as a root!\n";
 33 #               print "\tSuggested not to do so !!!\n\n";
 34 #               exit 1;
 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 1;
 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 1;
 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 1;
 68         }
 69 
 70         if ( $unixsocket ) {
 71                 print " Creating UNIX socket\n" if $verbose;
 72                 $socket = FCGI::OpenSocket( $unixsocket, 10 );
 73                 if ( !$socket) {
 74                         print " Couldn‘t create socket\n";
 75                         addlog($logfile, "Couldn‘t create socket");
 76                         exit 1;
 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, 10 );
 83                 if ( !$socket ) {
 84                         print " Couldn‘t create socket\n";
 85                         addlog($logfile, "Couldn‘t create socket");
 86                         exit 1;
 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 1;
 96         }
 97         print " Using PID file $filepid\n" if $verbose;
 98         addlog($logfile, "Using PID file $filepid");
 99 
100         my $pidnumber = $$;
101         $pidnumber > io($filepid);
102         print " PID number $$\n" if $verbose;
103         addlog($logfile, "PID number $pidnumber");
104 
105 }
106 
107 sub addzero {
108         my ($date) = shift;
109         if ($date < 10) {
110                 return "0$date";
111         }
112        return $date;
113 }
114 
115 sub logformat {
116         my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$iddst) = localtime(time);
117         my $datestring;
118         $year += 1900;
119         $mon++;
120         $mon  = addzero($mon);
121         $mday = addzero($mday);
122         $min  = addzero($min);
123         $datestring = "$year-$mon-$mday $hour:$min";
124         return($datestring);
125 }
126 
127 sub addlog {
128         my ($log_file, $log_message) = @_;
129         my $curr_time = logformat();
130         my $write_message = "[$curr_time]   $log_message";
131         $write_message >> io($log_file);
132         "\n" >> io($log_file);
133 }
134 
135 sub printerror {
136         my $message = @_;
137         print "\n       Nginx FastCGI\tERROR\n"
138                 . "\t $message\n\n";
139         exit 1;
140 }
141 
142 sub usage {
143         print "\n       Nginx FastCGI \n"
144                 . "\n\tusage: $0 [-h] -S string -P int\n"
145                 . "\n\t-h\t\t: this (help) message"
146                 . "\n\t-S path\t\t: path for UNIX socket"
147                 . "\n\t-P port\t\t: port number"
148                 . "\n\t-p file\t\t: path for pid file"
149                 . "\n\t-l file\t\t: path for logfile"
150                 . "\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";
151         exit 1;
152 }
153 
154 
155 init;
156         exit unless [email protected] =~ /^fakeexit/;
157 } ;
158 
159 # fork part
160 my $pid = fork();
161 
162 if( $pid == 0 ) {
163         &main;
164         exit 0;
165 }
166 
167 print " Forking worker process with PID $pid\n" if $verbose;
168 addlog($logfile, "Forking worker process with PID $pid");
169 print " Update PID file $filepid\n" if $verbose;
170 addlog($logfile, "Update PID file $filepid");
171 $pid > io($filepid);
172 print " Worker process running.\n" if $verbose;
173 addlog ($logfile, "Parent process $$ is exiting");
174 exit 0;
175 
176 sub main {
177         $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );
178         if ($request) { request_loop()};
179                 FCGI::CloseSocket( $socket );
180 }
181 
182 sub request_loop {
183         while( $request->Accept() >= 0 ) {
184                 # processing any STDIN input from WebServer (for CGI-POST actions)
185                 $stdin_passthrough = ‘‘;
186                 $req_len = 0 + $req_params{‘CONTENT_LENGTH‘};
187                 if (($req_params{‘REQUEST_METHOD‘} eq ‘POST‘) && ($req_len != 0) ){
188                         while ($req_len) {
189                                 $stdin_passthrough .= getc(STDIN);
190                                 $req_len--;
191                         }
192                 }
193 
194                 # running the cgi app
195                 if ( (-x $req_params{SCRIPT_FILENAME}) &&
196                         (-s $req_params{SCRIPT_FILENAME}) &&
197                         (-r $req_params{SCRIPT_FILENAME})
198                 ){
199                         foreach $key ( keys %req_params){
200                                 $ENV{$key} = $req_params{$key};
201                         }
202                         if ( $verbose ) {
203                                 addlog($logfile, "running $req_params{SCRIPT_FILENAME}");
204                         }
205                         # http://perldoc.perl.org/perlipc.html#Safe-Pipe-Opens
206                         #
207                         #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 !");
208                         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 !");
209 
210                         if ($cgi_app) {
211                                 print <$cgi_app>;
212                                 close $cgi_app;
213                         }
214                 } else {
215                         print("Content-type: text/plain\r\n\r\n");
216                         print "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.\n";
217                         addlog($logfile, "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.");
218                 }
219         }
220 }

221

nginx环境下配置nagios-关于perl-fcgi.pl

时间: 2024-09-30 06:18:19

nginx环境下配置nagios-关于perl-fcgi.pl的相关文章

nginx环境下配置nagios-关于nagios配置文件nginx.conf

接上文:nginx环境下配置nagios-关于nginx.conf 配置如下: 1 server 2 { 3         listen       80; 4         server_name  192.168.44.44; 5         index index.html index.htm index.php; 6         root  /usr/local/nagios/share; 7         auth_basic "Nagios Access"; 

nginx环境下配置nagios-关于start_perl_cgi.sh

1 #!/bin/bash 2 set -x 3 dir=/export/servers/nginx 4  5 stop () 6 { 7 #pkill  -f  $dir/perl-fcgi.pl 8 kill $(cat $dir/logs/perl-fcgi.pid) 9 rm $dir/logs/perl-fcgi.pid 2>/dev/null10 rm $dir/logs/perl-fcgi.sock 2>/dev/null11 echo "stop perl-fcgi 

nginx环境下配置nagiosQL-关于nagiosql配置文件

接上文:nginx环境下配置nagios-关于nginx.conf nagiosql文件应该处于conf/domain/目录下 nagiosql配置如下: 1 server 2 { 3         listen       8088; 4         server_name  192.168.44.44; 5         index index.html index.htm index.php; 6         root  /usr/local/nagios/nagiosql/;

nginx环境下配置nagios-关于commands.cfg

nagios监控Linux/windows常用配置,以snmp.nrpe实现 1 # 'process-host-perfdata' command definition 2 define command{  3     command_name    process-host-perfdata  4     #command_line    /usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HO

Nginx环境下配置PHP使用的SSL认证(https)

最近一段时间发现好多网站都从http协议变成了加密的https协议,比如说百度.吾志等等.https看起来比http高端了好多,而且在不同的浏览器向上还会显示出不同于http的URL展示效果(比如说chrome 和QQ浏览器 使用https协议的网址就会变色). 于是自己就想着把自己的网站加一个ssl证书,使之变成https://iwenku.net 最开始我使用的是腾讯云的服务器,服务器系统是Windows,使用Windows虽然坏处挺多,但是也有好处,那就是Windows是图形化界面的,这样

nginx环境下搭建nagios 3.5.0

本文基于<LNMP最新源码安装脚本>,Nagios依赖PHP环境和perl环境,由于Nginx不支持Perl的CGI,需先来搭建Perl环境,Nagios原理介绍略. 1.下载最新稳定源码包和Perl脚本 wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.74.tar.gz wget http://www.cpan.org/authors/id/B/BO/BOBTFISH/FCGI-ProcManager-0.24.tar.gz wg

&lt;nginx+PHP&gt;nginx环境下配置支持php7

[[email protected] ~]# wget http://am1.php.net/get/php-7.1.2.tar.gz/from/this/mirror [[email protected] ~]# tar xzvf php-7.1.2.tar.gz [[email protected] ~]# cd php-7.1.2/ [[email protected] ~]# ./configure--prefix=/usr/local/php --enable-fpm [[email 

phpmyadmin在nginx环境下配置错误

location ~ \.css {           add_header  Content-Type    text/css;        } location ~ \.js {            add_header  Content-Type    application/x-javascript;        } 不能配置以上两项,否则不到phpmyadmin.css.php这个文件以上*.js.php等文件 原文地址:https://www.cnblogs.com/caic

在APACHE环境下配置下载服务器的注意事项

这篇文章主要介绍了在APACHE环境下配置下载服务器的注意事项,需要的朋友可以参考下 环境 平台:FreeBSD6.1 服务器:APACHE2.0.59 组件: libiconv-1.9.2_2.tbz     pkgconfig-0.20.tbz          #pkg_add添加组件时需要的文件 libxml2-2.6.23_1.tbz   perl-5.8.8.tbz                   #要使用pkg_add添加的组件 mod_bw-0.7.gz   mod_limi