Thread Projekt - Perl in Windows 2008 (47 answers)
Opened by WilliamW at 2013-10-17 18:11

WilliamW
 2013-10-23 13:09
#171428 #171428
User since
2013-10-17
27 Artikel
BenutzerIn
[default_avatar]
Ich habe mal folgende Zeilen geschrieben und dabei ist mir auf gefallen, dass der Server Manager von W2008 keinen Versuch startet den Perl-Service zu starten.
Bei folgendem Quellcode startet angeblich der Perl-Service, aber wenn ich darauf warte, dass der Service Manager darauf reagiert und diesen auch wirklich als Service startet, dann passiert nichts.
Wisst ihr wo da die Ursache des Problems liegt ?
Denn anscheinend kommuniziert der Perl-Service sofern dieser wirklich gestartet ist nicht mit dem Service Manager von W2008.

Bei der Ausgabe erhalte ich noch den print "start", aber leider geht der count bis "sleep 19" und dann unterbricht die Schleife.
Wenn ich keine count Variable einfüge, dann kommt das Programm erst gar nicht aus der (endlos) Schleife raus, weil der Service Manager anscheinend überhaupt nicht reagiert.

Muss ich evtl. mehr Geduld zeigen ? Ist es normal, dass er solange brauch ? Was meint ihr ?
Irgendwelche Hinweise bzw. Vorschläge ?
Wie gesagt läuft die Probe bisher nur auf einer Virtuellen Maschine.

"testService.pl"
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl -w
use Win32::Daemon;
$count = 0;
#OS den Start des Service Prozesses mitteilen
Win32::Daemon::StartService();
print "start \n";
# Warten bis der Service Manager bereit ist fort zu setzen
# Wobei "SERVICE_START_PENDING" bedeutet, dass der Service Manager versucht bzw. beginnt den Service zu starten
# Solang diese Schleife also nicht verlassen wird, startet der Service Manager auch nicht den Service
# sleep auf eine Sekunde gestellt, damit der Service Manager eine gewisse Zeit hat um zu reagieren
# wobei ich ihm durch $count 20 Versuche gebe, dass der Service Manager reagiert
while ( SERVICE_START_PENDING != Win32::Daemon::State() && $count < 20 )
{
sleep ( 1 );
print "sleep " . $count . "\n";
$count = $count + 1 ;
}

# Teilt den Service Manager mit, dass der Service läuft.
Win32::Daemon::State( SERVICE_RUNNING ) ;


Wenn ich die While-Schleife so schreibe, dass ich sehen kann, was Win32::Daemon::State() zurück gibt, dann erhalte ich beim "sleep 0" eine Rückgabe von Win32::Daemon::State() == 0.
Bei "sleep 1" und allen restlichen print's hingegen erhalte ich eine Rückgabe von Win32::Daemon::State() == 1 (bzw. "sleep 1 state: 1"). Was Bedeutet das ? Hat der Service Manager also doch reagiert ? Und warum werden in der Dokumentation von Win32-Daemon im CPAN andere Rückgabewerte für Win32::Daemon::State() aufgelistet ?

Code: (dl )
1
2
3
4
5
6
7
while ( SERVICE_START_PENDING != Win32::Daemon::State() && $count < 20 )
{
$state = Win32::Daemon::State();
sleep ( 1 );
print "sleep " . $count . " state: " . $state . "\n";
$count = $count + 1 ;
}

Last edited: 2013-10-23 14:13:08 +0200 (CEST)

View full thread Projekt - Perl in Windows 2008