-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcheck_pid.pl
executable file
·116 lines (100 loc) · 2.8 KB
/
check_pid.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/perl
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
use strict;
use warnings FATAL => 'all';
use constant OK => 0;
use constant WARNING => 1;
use constant CRITICAL => 2;
use constant UNKNOWN => 3;
# Service state
use constant INACTIVE => 0;
use constant ACTIVE => 1;
my $pkg_nagios_available = 0;
my $pkg_monitoring_available = 0;
BEGIN {
eval {
require Monitoring::Plugin;
require Monitoring::Plugin::Functions;
$pkg_monitoring_available = 1;
};
if (!$pkg_monitoring_available) {
eval {
require Nagios::Plugin;
require Nagios::Plugin::Functions;
*Monitoring::Plugin:: = *Nagios::Plugin::;
$pkg_nagios_available = 1;
};
}
if (!$pkg_monitoring_available && !$pkg_nagios_available) {
print("UNKNOWN - Unable to find module Monitoring::Plugin or Nagios::Plugin\n");
exit UNKNOWN;
}
}
my $mp = Monitoring::Plugin->new(
shortname => "check_pid",
usage => ""
);
$mp->add_arg(
spec => 'pid_file|f=s',
help => 'PID file to use',
required => 1
);
$mp->add_arg(
spec => 'missing_file_ok',
help => 'Don\' warn if pid file is missing'
);
$mp->getopts;
if ( defined $mp->opts->pid_file && !-f $mp->opts->pid_file) {
if ($mp->opts->missing_file_ok) {
wrap_exit(
OK,
sprintf('Missing PID file \'%s\' ignored by request', $mp->opts->pid_file)
);
} else {
wrap_exit(
WARNING,
sprintf('PID file \'%s\' missing', $mp->opts->pid_file)
);
}
}
my $cmd = 'pgrep ';
$cmd .= sprintf('--pidfile %s ', $mp->opts->pid_file);
$cmd .= '--list-name';
my $output = `$cmd 2>&1`;
# See: perldoc perlvar
my $rc = $? >> 8;
if ($rc == 0) {
wrap_exit(
OK,
sprintf("Process running\n%s", $output),
);
} elsif ($rc == 1) {
wrap_exit(
CRITICAL,
sprintf("No process found\n%s", $output),
);
} else {
wrap_exit(
UNKNOWN,
sprintf("Return code %d. Please check your command\n%s", $rc, $output)
);
}
sub wrap_exit
{
if($pkg_monitoring_available == 1) {
$mp->plugin_exit( @_ );
} else {
$mp->nagios_exit( @_ );
}
}