Thread Lebensdauer Thread > Elternprozess? (6 answers)
Opened by weltwusel at 2009-12-12 23:42

bianca
 2009-12-13 09:43
#129277 #129277
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
2009-12-12T22:42:49 weltwusel
Folgendes Problem: Ich will einen Crawler fürs Web programmieren und die Steuerung via (CGI)Webseite regeln.

Ich hab hier auch diverse Hintergrundjobs, die ich auch per Webseite steuere. Folgendes Konzept liegt dahinter:

1. Grundsätzlich werden Jobs per CRON gestartet. Aufruf z.B. "/pfad/cgi-bin/meinscript.pl CRON".
2. Mein Script unterscheidet zwei Aufrufvarianten gleich ziemlich am Anfang. Web und CRON wie folgt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (defined @ARGV) {
        # CRON Ausführung
        my $pid;
        if ($pid = fork()) {
                # Vater killen, wird nicht gebraucht bei CRON
                exit ();
        }
        else {
                # Sohn
                require "/pfad_zum_modul/cron.pl";
                &cron_ausfuehren_shell(\%env);
                exit ();
        }
        # /CRON Ausführung
}

3. Darüberhinaus kann ich jeden Job auch über Webseite starten, dafür mach ich nach Betätigung des Startbuttons diesen hier:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
if ($aufruf eq 'cronstart') {
        # CRON Ausführung
        my $pid;
        if ($pid = fork()) {
                # Vater jetzt leben lassen, Webseite ausgeben
        }
        else {
                # Sohn
                &cron_ausfuehren_shell(\%env,'SOFORT');
                exit ();
        }
        # /CRON Ausführung
}

Das 'SOFORT' hinten sagt der sub nur, ob auf den nächsten Ausführungstermin geachtet werden muss oder nicht.
4. Sämtliche Steuerinformationen (letzte Ausführung, nächste, darf oder darf nicht etc.) hab ich in einer Steuerdatei liegen.
5. Die eigentlichen Jobs liegen in der sub cron_ausfuehren_shell().

So kann ich mit einem einzigen Script alles steuern und dieses sowohl für Starts aus dem Web als auch über CRON verwenden. Natürlich liegt das Script in einer Umgebung mit Username und Paßwort Absicherung.
Und es erfüllt exakt Deine Anforderung. Crawler läuft im Hintergrund weiter, Steuerseite im Web erscheint und alles wurde per Button über CGI gestartet.

Das Stoppen würde ich machen, wie betterworld geschrieben hat.

Edit: Tabs entfernt
Last edited: 2009-12-13 09:50:12 +0100 (CET)
10 print "Hallo"
20 goto 10

View full thread Lebensdauer Thread > Elternprozess?