blob: 2c7eded98d57151d890e6432b04b9541c3ad2d79 (
plain) (
blame)
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
|
#!/usr/bin/perl
use strict;
use Getopt::Std;
$| = 1;
my %opts;
getopts('hr:C:c:s:o:', \%opts);
my $STATE_OK = 0;
my $STATE_WARNING = 1;
my $STATE_CRITICAL = 2;
my $STATE_UNKNOWN = 3;
if ($opts{'h'} || scalar(%opts) == 0) {
&print_help();
exit($STATE_OK);
}
my $command = $opts{'c'};
if ($command eq '') {
print "You must provide a command to check.\n";
exit($STATE_UNKNOWN);
}
my $expected_output = $opts{'o'};
my $expected_status = $opts{'s'};
my $other_command = $opts{'C'};
if ($other_command eq '' and $expected_status eq '' and $expected_output eq '') {
$expected_status = 0;
}
my $cmd = $command . ' 2>&1';
my $other_cmd;
if ($other_command ne '') {
$other_cmd = $other_command . ' 2>&1';
}
my $run_as;
if ($opts{'r'}) {
$run_as = $opts{'r'};
$cmd = "sudo -u $run_as -n $cmd";
if ($other_command ne '') {
$other_cmd = "sudo -u $run_as -n $other_cmd";
}
}
my $cmd_result = `$cmd`;
my $other_cmd_result;
if ($other_command ne '') {
$other_cmd_result = `$other_cmd`;
chomp($other_cmd_result);
}
chomp($cmd_result);
if ($cmd_result =~ /sudo/i) {
print "$command CRITICAL - No sudo right to run the command\n";
exit($STATE_UNKNOWN);
} elsif ($expected_status ne '') {
if ($? != $expected_status) {
print "$command CRITICAL - Response status $?\n";
exit($STATE_CRITICAL);
} else {
print "$command OK - Response status $?\n";
exit($STATE_OK);
}
} elsif ($other_command ne '') {
if ($cmd_result ne $other_cmd_result) {
print "$command CRITICAL - Expected output not matching other command output\n";
exit($STATE_CRITICAL);
} else {
print "$command OK - Expected output matching other command output\n";
exit($STATE_OK);
}
} else {
if ($cmd_result !~ /$expected_output/) {
print "$command CRITICAL - Expected output not matching\n";
exit($STATE_CRITICAL);
} else {
print "$command OK - Expected output matching\n";
exit($STATE_OK);
}
}
sub print_help() {
print << "EOF";
Check whether the given command responds as expected. One of -o -C or -s must be selected.
Options:
-h
Print detailed help screen
-c
command to run (required)
-C
other command to compare output
-r user
Run as user via sudo.
-s
status code to check
-o
output to check
EOF
}
|