Perl: Prozess nach 1 Stunde kontrolliert beenden und neustarten: alarm() geht nicht

Marius Heil

Erfahrenes Mitglied
Hi,

Ich hab nen kleinen Socket Server in Perl geschreiben, kenn mich in Perl eigentlich sehr wenig aus. Inzwischen kann man ihn zusammen mit nem Flash Clienten zum chatten benutzen und er unterstützt zudem mehrere Räume und läuft sehr Performancesparend.
Mein Problem ist die Max-execution-time meines Hosters. Aus dem Grund muss ich den Prozess nach 1 Stunde beenden, Räume usw in ne Datei schreiben und neustarten.
Das Problem ist, dass der ganze Server innerhalb ner Schleife läuft die so aussieht:
PHP:
while( @read_ready = $sel->can_read ) {
...

}
Diese Schleife läuft immer nur durch, wenn wirklich ein Client eine Nachricht an den Server schickt. Davon kann ich aber gerade zu späteren Zeiten nicht ausgehen.

Ich muss also einen Timer starten, der autonom läuft und das Script nach 1 Stunde beendet. Alarm hat mir mir keine Erfolge beschert...

Marius
 
Inzwischen hab ich rausgefunden, was ich machen muss.
can_read akzeptiert ein Timeout, das hab ich auf ne Stunde gesetzt, dann noch die Cleanup-Funktion geschreiben, die am ende des Scripts oder aber nach 1 Stunde aufgerufen wird.
Jetzt werden alle Räume in einer Datei gesichert.

Marius
 

Neue Beiträge

Zurück