Windows Dienst mit Perl

fiber opticWin32::Daemon;
Win32::Daemon::StartService();

while (SERVICE_START_PENDING != Win32::Daemon::State()) {
sleep(1); }

Win32::Daemon::State(SERVICE_RUNNING);

while (1) {
open FOUT, „>>c:\\win32testserv.log“;
print FOUT localtime() . „\n“;
close FOUT;
sleep 3;
if (Win32::Daemon::State() == SERVICE_STOP_PENDING) {
open FOUT, „>>c:\\win32testserv.log“;
print FOUT „Jetzt ist aber Schluss\n“;
close FOUT;
exit 0;
} }

Win32::Daemon::StopService();
Win32::Daemon::State(SERVICE_STOPPED);

#Nennen wir das obenstehende Skript ‚test.pl‘ und sagen wir, das Skript läge unter ‚c:\scripts‘.
#Wir können nun diese Datei mit dem folgenden Befehl als Dienst registrieren:
#
#perl win32serv.pl install Test c:\\scripts\\test.pl
#
#Der nun installierte Dienst kann mit ’net start Test‘ gestartet
#werden und bewirkt, dass alle drei Sekunden das aktuelle Datum in einer Log-Datei festgehalten wird.

Perl startet Programm mit Timeoute

>rent a car bulgariaEnglish;
@Ruck= SystemCmd(”e: && cd\\.. && Test.bat”);
print @Ruck;
sub SystemCmd
{
eval {
local $SIG{ALRM} = sub { die “Alarm” };
alarm(10);
system($_[0].”>\\SystemCmd.dat”);
open FILE,”<\\SystemCmd.dat” or print “File fehler\n”;
@dat=<FILE>;
close FILE;
alarm(0);
};
if ($EVAL_ERROR=~ /Alarm/)  { return (”Timeout bei $_[0], Error, ERROR, Timeout Fehler!!”);  }
else                        { return (@dat);                                  }
}#SystemCmd