--- /dev/null
+#!/usr/bin/env 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 | result=1;;;;\n";
+ exit($STATE_UNKNOWN);
+} elsif ($expected_status ne '') {
+ if ($? != $expected_status) {
+ print "$command CRITICAL - Response status $? | result=1;;;;\n";
+ exit($STATE_CRITICAL);
+ } else {
+ print "$command OK - Response status $? | result=0;;;;\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 | result=1;;;;\n";
+ exit($STATE_CRITICAL);
+ } else {
+ print "$command OK - Expected output matching other command output | result=0;;;;\n";
+ exit($STATE_OK);
+ }
+} else {
+ if ($cmd_result !~ /$expected_output/) {
+ print "$command CRITICAL - Expected output not matching | result=1;;;;\n";
+ exit($STATE_CRITICAL);
+ } else {
+ print "$command OK - Expected output matching | result=0;;;;\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
+}
+