#!perl
use strict;
use autodie;
use Win32::Service qw'GetServices GetStatus StopService';
use POSIX;
my $date = strftime("%Y-%m-%d", localtime);
my @state_name = qw( UNKNOWN Stopped START_PENDING STOP_PENDING
Running CONTINUE_PENDING PAUSE_PENDING
PAUSED ERROR );
my $filename = '/log_script/ServiceList.txt';
open FILE, '<', $filename;# autodie
my $hostname = <FILE>;
chomp $hostname;
my @services = <FILE>;
close FILE;
open MYFILE, ">>", "/log_script/service_logs/servicestatus\_$date\.log
+";
print MYFILE "Checking Services available for '$hostname'\n";
my %available=();
GetServices($hostname,\%available) or die "$!";
# add short names
$available{$_} = $_ for values %available;
for (my $n=0; $n <= 3; $n++)
{
my $t = scalar localtime;
print MYFILE "\nChecking services in list - run $n $t\n";
while (@services)
{
s/^\s+|\s+$//g; # trim leading and trailing whites
+pace
if (exists $available{$_})
{
my $shortname = $available{$_};
my %status;
GetStatus($hostname, $shortname, \%status);
my $state_no = $status{'CurrentState'};
printf MYFILE " ServiceStatus: %s %s %s \n", $hostnam
+e, $shortname, $state_name[$state_no];
}
else
{
print MYFILE "-- ERROR -- '$_' status not avaiable\n";
}
}
sleep (10)
}
This is what I modified based on the script you gave me.
I tried an approach that using windows scheduler to run original script at an interval time, but I did not get the output file via that approach. I do not know what configuration I have missed.
Now I am trying to hard coding the repeats to check services, but it generated a huge file within a min. |