diff options
Diffstat (limited to 'plugins-scripts/check_rpc.pl')
-rwxr-xr-x | plugins-scripts/check_rpc.pl | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/plugins-scripts/check_rpc.pl b/plugins-scripts/check_rpc.pl new file mode 100755 index 00000000..51901ac0 --- /dev/null +++ b/plugins-scripts/check_rpc.pl | |||
@@ -0,0 +1,274 @@ | |||
1 | #! /usr/bin/perl -wT | ||
2 | # | ||
3 | # check_rpc plugin for nagios | ||
4 | # | ||
5 | # usage: | ||
6 | # check_rpc host service | ||
7 | # | ||
8 | # Check if an rpc serice is registered and running | ||
9 | # using rpcinfo - $proto $host $prognum 2>&1 |"; | ||
10 | # | ||
11 | # Use these hosts.cfg entries as examples | ||
12 | # | ||
13 | # command[check_nfs]=/some/path/libexec/check_rpc $HOSTADDRESS$ nfs | ||
14 | # service[check_nfs]=NFS;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_rpc | ||
15 | # | ||
16 | # initial version: 3 May 2000 by Truongchinh Nguyen and Karl DeBisschop | ||
17 | # current status: $Revision$ | ||
18 | # | ||
19 | # Copyright Notice: GPL | ||
20 | # | ||
21 | BEGIN { | ||
22 | if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) { | ||
23 | $runtimedir = $1; | ||
24 | $PROGNAME = $2; | ||
25 | } | ||
26 | } | ||
27 | |||
28 | use strict; | ||
29 | use lib $main::runtimedir; | ||
30 | use utils qw($TIMEOUT %ERRORS &print_revision &support); | ||
31 | use vars qw($PROGNAME); | ||
32 | my ($verbose,@proto,%prognum,$host,$response,$prognum,$port,$cmd); | ||
33 | my ($array_ref,$test,$element,@progkeys,$proto,$a,$b); | ||
34 | my ($opt_V,$opt_h,$opt_C,$opt_p,$opt_H); | ||
35 | $opt_V = $opt_h = $opt_C = $opt_p = $opt_H = ''; | ||
36 | |||
37 | sub print_help (); | ||
38 | sub print_usage (); | ||
39 | sub in ($$); | ||
40 | |||
41 | $ENV{'BASH_ENV'}=''; | ||
42 | $ENV{'ENV'}=''; | ||
43 | $ENV{'PATH'}=''; | ||
44 | |||
45 | #Initialise protocol for each progname number | ||
46 | # 'u' for UDP, 't' for TCP | ||
47 | $proto[10003]='u'; | ||
48 | $proto[10004]='u'; | ||
49 | $proto[10007]='u'; | ||
50 | |||
51 | use Getopt::Long; | ||
52 | Getopt::Long::Configure('bundling'); | ||
53 | GetOptions | ||
54 | ("V" => \$opt_V, "version" => \$opt_V, | ||
55 | "h" => \$opt_h, "help" => \$opt_h, | ||
56 | "C=s" => \$opt_C, "command=s" => \$opt_C, | ||
57 | "p=i" => \$opt_p, "port=i" => \$opt_p, | ||
58 | "H=s" => \$opt_H, "hostname=s" => \$opt_H); | ||
59 | |||
60 | # -h means display verbose help screen | ||
61 | if ($opt_h) { print_help(); exit 0; } | ||
62 | |||
63 | # -V means display version number | ||
64 | if ($opt_V) { print_revision($PROGNAME,'$Revision$ '); exit 0; } | ||
65 | |||
66 | # -H means host name | ||
67 | $opt_H = shift unless ($opt_H); | ||
68 | unless ($opt_H) { print_usage(); exit -1; } | ||
69 | if($opt_H && $opt_H =~ m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z][-a-zA-Z0-9]+(\.[a-zA-Z][-a-zA-Z0-9]+)*)$/) { | ||
70 | $host = $1; | ||
71 | } else { | ||
72 | print "$opt_H is not a valid host name\n"; | ||
73 | exit -1; | ||
74 | } | ||
75 | |||
76 | while (<DATA>) { | ||
77 | ($a,$b) = split; | ||
78 | $prognum{$a} = $b; | ||
79 | } | ||
80 | close DATA; | ||
81 | |||
82 | # -C means command name or number | ||
83 | $opt_C = shift unless ($opt_C); | ||
84 | unless ($opt_C) { print_usage(); exit -1; } | ||
85 | @progkeys = keys %prognum; | ||
86 | if ($opt_C =~ m/^([0-9]+)$/){ | ||
87 | $response = "RPC ok: program $opt_p (version "; | ||
88 | $prognum = $1; | ||
89 | } elsif ( in( \@progkeys, $opt_C)) { | ||
90 | $response = "RPC ok: $opt_C (version "; | ||
91 | $prognum = $prognum{$opt_C}; | ||
92 | } else { | ||
93 | print "Program $opt_C is not defined\n"; | ||
94 | exit -1; | ||
95 | } | ||
96 | |||
97 | # -p means port number | ||
98 | if($opt_p =~ /^([0-9]+)$/){ | ||
99 | $port = "-n $1"; | ||
100 | } else { | ||
101 | $port = ""; | ||
102 | } | ||
103 | |||
104 | $proto = 'u'; | ||
105 | $proto = $proto[$prognum] if ($proto[$prognum]); | ||
106 | $cmd = "/usr/sbin/rpcinfo $port -" . "$proto $host $prognum 2>&1 |"; | ||
107 | print "$cmd\n" if ($verbose); | ||
108 | open CMD, $cmd; | ||
109 | |||
110 | while ( <CMD> ) { | ||
111 | chomp; | ||
112 | if ( /program $prognum version ([0-9]*) ready and waiting/ ) { | ||
113 | $response .= "$1) is running"; | ||
114 | print "$response\n"; | ||
115 | exit 0; | ||
116 | } | ||
117 | } | ||
118 | |||
119 | print "RPC CRITICAL: Program $opt_C not registered\n"; | ||
120 | exit 2; | ||
121 | |||
122 | |||
123 | |||
124 | sub print_help() { | ||
125 | print_revision($PROGNAME,'$Revision$ '); | ||
126 | print "Copyright (c) 2000 Karl DeBisschop/Truongchinh Nguyen\n"; | ||
127 | print "\n"; | ||
128 | print "Check if a rpc service is registered and running using\n"; | ||
129 | print " rpcinfo -<protocol> <host> <program number>\n"; | ||
130 | print "\n"; | ||
131 | print_usage(); | ||
132 | print "\n"; | ||
133 | print "<host> The server providing the rpc service\n"; | ||
134 | print "<program> The program name (or number).\n\n"; | ||
135 | support(); | ||
136 | } | ||
137 | |||
138 | sub print_usage () { | ||
139 | print "$PROGNAME -H host -C rpc_command [-p port]\n"; | ||
140 | print "$PROGNAME [-h | --help]\n"; | ||
141 | print "$PROGNAME [-V | --version]\n"; | ||
142 | } | ||
143 | |||
144 | sub in ($$) { | ||
145 | $array_ref = shift; | ||
146 | $test = shift; | ||
147 | |||
148 | while ( $element = shift @{$array_ref} ) { | ||
149 | if ($test eq $element) { | ||
150 | return 1; | ||
151 | } | ||
152 | } | ||
153 | return 0; | ||
154 | } | ||
155 | |||
156 | __DATA__ | ||
157 | portmapper 100000 | ||
158 | portmap 100000 | ||
159 | sunrpc 100000 | ||
160 | rpcbind 100000 | ||
161 | rstatd 100001 | ||
162 | rstat 100001 | ||
163 | rup 100001 | ||
164 | perfmeter 100001 | ||
165 | rstat_svc 100001 | ||
166 | rusersd 100002 | ||
167 | rusers 100002 | ||
168 | nfs 100003 | ||
169 | nfsprog 100003 | ||
170 | ypserv 100004 | ||
171 | ypprog 100004 | ||
172 | mountd 100005 | ||
173 | mount 100005 | ||
174 | showmount 100005 | ||
175 | ypbind 100007 | ||
176 | walld 100008 | ||
177 | rwall 100008 | ||
178 | shutdown 100008 | ||
179 | yppasswdd 100009 | ||
180 | yppasswd 100009 | ||
181 | etherstatd 100010 | ||
182 | etherstat 100010 | ||
183 | rquotad 100011 | ||
184 | rquotaprog 100011 | ||
185 | quota 100011 | ||
186 | rquota 100011 | ||
187 | sprayd 100012 | ||
188 | spray 100012 | ||
189 | 3270_mapper 100013 | ||
190 | rje_mapper 100014 | ||
191 | selection_svc 100015 | ||
192 | selnsvc 100015 | ||
193 | database_svc 100016 | ||
194 | rexd 100017 | ||
195 | rex 100017 | ||
196 | alis 100018 | ||
197 | sched 100019 | ||
198 | llockmgr 100020 | ||
199 | nlockmgr 100021 | ||
200 | x25_inr 100022 | ||
201 | statmon 100023 | ||
202 | status 100024 | ||
203 | bootparam 100026 | ||
204 | ypupdated 100028 | ||
205 | ypupdate 100028 | ||
206 | keyserv 100029 | ||
207 | keyserver 100029 | ||
208 | sunlink_mapper 100033 | ||
209 | tfsd 100037 | ||
210 | nsed 100038 | ||
211 | nsemntd 100039 | ||
212 | showfhd 100043 | ||
213 | showfh 100043 | ||
214 | ioadmd 100055 | ||
215 | rpc.ioadmd 100055 | ||
216 | NETlicense 100062 | ||
217 | sunisamd 100065 | ||
218 | debug_svc 100066 | ||
219 | dbsrv 100066 | ||
220 | ypxfrd 100069 | ||
221 | rpc.ypxfrd 100069 | ||
222 | bugtraqd 100071 | ||
223 | kerbd 100078 | ||
224 | event 100101 | ||
225 | na.event 100101 | ||
226 | logger 100102 | ||
227 | na.logger 100102 | ||
228 | sync 100104 | ||
229 | na.sync 100104 | ||
230 | hostperf 100107 | ||
231 | na.hostperf 100107 | ||
232 | activity 100109 | ||
233 | na.activity 100109 | ||
234 | hostmem 100112 | ||
235 | na.hostmem 100112 | ||
236 | sample 100113 | ||
237 | na.sample 100113 | ||
238 | x25 100114 | ||
239 | na.x25 100114 | ||
240 | ping 100115 | ||
241 | na.ping 100115 | ||
242 | rpcnfs 100116 | ||
243 | na.rpcnfs 100116 | ||
244 | hostif 100117 | ||
245 | na.hostif 100117 | ||
246 | etherif 100118 | ||
247 | na.etherif 100118 | ||
248 | iproutes 100120 | ||
249 | na.iproutes 100120 | ||
250 | layers 100121 | ||
251 | na.layers 100121 | ||
252 | snmp 100122 | ||
253 | na.snmp 100122 | ||
254 | snmp-cmc 100122 | ||
255 | snmp-synoptics 100122 | ||
256 | snmp-unisys 100122 | ||
257 | snmp-utk 100122 | ||
258 | traffic 100123 | ||
259 | na.traffic 100123 | ||
260 | nfs_acl 100227 | ||
261 | sadmind 100232 | ||
262 | nisd 100300 | ||
263 | rpc.nisd 100300 | ||
264 | nispasswd 100303 | ||
265 | rpc.nispasswdd 100303 | ||
266 | ufsd 100233 | ||
267 | ufsd 100233 | ||
268 | pcnfsd 150001 | ||
269 | pcnfs 150001 | ||
270 | amd 300019 | ||
271 | amq 300019 | ||
272 | bwnfsd 545580417 | ||
273 | fypxfrd 600100069 | ||
274 | freebsd-ypxfrd 600100069 | ||