【发布时间】:2014-07-02 17:55:37
【问题描述】:
这里是检查windows服务状态的脚本,如果它们处于停止状态,它将启动服务。我可以获取服务状态,但无法启动服务。 请帮忙,让我知道我需要做什么。
#!/usr/local/bin/perl
use Win32::Service;
use strict;
sub checkService();
sub getDate();
sub getTime();
sub logEvent();
my @timeInfo = localtime(time);
my $serviceName = "TapiSrv";
my $currentDate = getDate();
my $currentTime = getTime();
my %status;
my %status_code = (1 => 'not running',
2 => 'start pending',
3 => 'stop pending',
4 => 'running',
5 => 'resume pending',
6 => 'pause pending',
7 => 'paused');
checkService();
########
# SUBS
########
sub checkService() {
my $startCounter = 0;
Win32::Service::GetStatus('', $serviceName, \%status);
if($status{"CurrentState"} eq '4') {
# Log the event
&logEvent("$currentTime: $serviceName is running\n");
} elsif($status{"CurrentState"} eq '1') {
Win32::Service::StartService('', $serviceName);
}
while($startCounter < 3) {
sleep(5);
Win32::Service::GetStatus('', $serviceName, \%status);
if($status{"CurrentState"} eq '2') {
$startCounter++;
} else {
$startCounter = 3;
}
}
if($startCounter == 3) {
&logEvent("$currentTime: Unable to start $serviceName in $startCounter attempts\n");
} else {
&logEvent("$currentTime: Started $serviceName in $startCounter attempts\n");
}
}
sub getDate() {
my $year = $timeInfo[5] + 1900;
my $month = $timeInfo[4] + 1;
my $day = $timeInfo[3];
return sprintf("%04d-%02d-%02d", $year, $month, $day);
}
sub getTime() {
my $hour = $timeInfo[2];
my $min = $timeInfo[1];
my $sec = $timeInfo[0];
return sprintf("%02d:%02d:%02d", $hour, $min, $sec);
}
sub logEvent() {
# Log the event
open(OUT, ">> C:/servicestatus/$currentDate.txt");
print OUT "$_[0]";
close(OUT);
}
【问题讨论】: