For some reason my logic isn't working. This is a nagios script I have written and the status output works as planned, but what I would like it to do is print out the list of domains and the days remaining until they expire. I had it coded differantly before without the fork but wanted to increase the performance. My issue now is the hash is empty upon completion. Seems like it has to do with the fork but not sure why. Here's what I got so far
#!/usr/bin/perl use warnings; use strict; use POSIX qw(strftime); use Time::Piece; use Cwd qw( abs_path ); use File::Basename; use File::Basename qw( dirname ); use LWP::Simple; use Parallel::ForkManager; use Date::Calc qw (Delta_Days); use Data::Dumper; my $pm = new Parallel::ForkManager(5); my $domains = dirname(abs_path($0)).'/domains.txt'; my %domainList; my $flag = 0; my $date = strftime "%Y-%m-%d", localtime; my %month = ( 'jan'=>'01','feb'=>'02','mar'=>'03','apr'=>'04','may'=>' +05','jun'=>'06','jul'=>'07','aug'=>'08','sep'=>'09','oct'=>'10','nov' +=>'11','dec'=>'12' ); open my $fh, $domains or die "CRIT: Unable to open $domains: $!\n"; while( my $domainName = <$fh> ) { chomp $domainName; print $domainName."\n"; $pm->start and next; my $expDate = `jwhois -n -h whois.crsnic.net $domainName | grep Ex +piration | awk '{print \$3}'`; print $expDate; my $diff = &dateDiff($expDate); if ($diff < 28 and $diff > 14) { $flag = 1; } elsif ($diff <= 14) { $flag = 2; } $domainList{$domainName} = $diff; exit($diff); $pm->finish; } close $fh; $pm->wait_all_children; print Dumper(\%domainList); if ($flag == 2){ my $status = "CRIT: There are Domains Expiring Soon. Please Resol +ve"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 2; } elsif ($flag == 1){ my $status = "WARN: There are Domains Expiring within a month. Pl +ease Resolve"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 1; } else { my $status = "OK: Domains Look good"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 0; } sub dateDiff { my $ex = shift; chomp $ex; my($day,$mon,$year) = split("-",$ex); my ($tyear,$tmon,$tday) = split("-",$date); print "$tyear, $tmon, $tday, $year, $month{$mon}, $day\n"; my $remaining_days = Delta_Days($tyear, $tmon, $tday, $year, $mont +h{$mon}, $day); return $remaining_days; }
As always any help is greatly appreciated
As you see I print out the hash just to test but it's always empty. I am sure I am missing something simple here
In reply to Creating a hash within a fork by edimusrex
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |