7 use POSIX
qw(strftime);
12 getopts
('hH:l:s:p:f:i:n:r:', \
%opts);
15 my $STATE_WARNING = 1;
16 my $STATE_CRITICAL = 2;
17 my $STATE_UNKNOWN = 3;
19 if ($opts{'h'} || scalar(%opts) == 0) {
24 my $port = $opts{'p'};
25 my $host = $opts{'H'};
26 my $login = $opts{'l'};
31 my $identity = $opts{'i'};
32 my $local_directory = $opts{'n'};
33 my $return_path = $opts{'r'};
35 my @emails_to_send = split(/,/, $opts{'s'});
36 my @emails_to_expect = split(/,/, $opts{'f'});
39 if ($local_directory ne '') {
40 if (@emails_to_expect and ! -d
$local_directory) {
41 print "Emails $host UNKNOWN - Could not find local directory";
44 $cmd_result = `send_mails $local_directory $return_path @emails_to_send 2>&1`;
46 $cmd_result = `ssh -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -p $port -i $identity $login$host send_mails @emails_to_send 2>&1`;
48 if ($cmd_result =~ /Host key verification failed./) {
49 print "Emails $host UNKNOWN - Could not connect to host with ssh key\n";
54 my @lines = split(/\n/, $cmd_result);
58 foreach my $line (@lines) {
59 my @split_line = split(/;/, $line, 2);
60 $found_emails{$split_line[0]} = $split_line[1];
64 foreach my $email_from (@emails_to_expect) {
65 my @email_split = split(/:/, $email_from);
66 my $email = $email_split[0];
67 my $from = $email_split[1];
69 if ( exists $found_emails{$email} ) {
70 my $email_date = str2time
($found_emails{$email});
71 my $current_date = strftime
"%s", localtime;
73 if ($current_date - $email_date > 60*30) {
74 $output = "$output$email ($found_emails{$email} from $from) ";
77 $output = "$output$email (missing) "
82 print "Emails $host CRITICAL - expecting emails: $output\n";
83 exit($STATE_CRITICAL);
85 print "Emails $host OK\n";
95 Print detailed help screen
107 Don’t
use ssh
, pass that directory to script
110 Return path
for local e-mails
113 Comma separated list of emails to
send from the host
.
116 Comma separated list of emails to expect on the host
.