* Markus Hahn ([EMAIL PROTECTED]) wrote/schrieb:

> 1.Gibt es Perl-module die dafür sorgen das ein Programm sich von der
> Shell verabschiedet und als Daemon im Hintergrund läuft? 
> (unter CPAN.org nichts vernünftiges gefunden.)

Dafür brauchst Du kein Modul. Read the FAQ:

http://www.perl.com/pub/doc/manual/html/pod/perlfaq8.html#How_do_I_fork_a_daemon_process_

Ich hab hier einen selbstgeschriebenen Daemon, der meine Sigs austauscht,
da sieht die Kernfunktionalität so aus:

if ( fork() == 0 ) {
        $0 = "sigmaker";
        setsid() or die "Failure while trying to fork: $!\n";
        chdir "/" or die "Can't chdir to Root: $!\n";
        open STDIN, "</dev/null" or die "Access to /dev/null failed: $!\n";
        open STDOUT, ">/dev/null" or die "Access to /dev/null failed: $!\n";
        open STDERR, ">/dev/null" or die "Access to /dev/null failed: $!\n";
        while (1){
                open fdOUT, ">$sigout" or die "Can't open $sigout: $!\n";
                print fdOUT "$sig[int(rand($#sig+1))]\n";
                close fdOUT;
                sleep $delay;
        }
}else{
        print "Forking into background\n";
}

(Ich mache, weil ich das bei der Kundschaft tun muß, auch zuhause viel auf
Englisch...)

Das schwierige dabei ist, sich die Sache mit if (fork() == 0) zu
verinnerlichen. Dazu mindestens die Manpage von fork lesen, und wo Du schon
dabei bist, die Manpage von setsid. Sind beide recht kurz und verständlich.

Wenn Du es ganz richtig machen willst, brauchst Du noch Signalhandler, aber
das muß nicht unbedingt sein.

> 2.Unter CPAN gibt es ein EVENT::Time modul wie baue ich das richtig in
> das Script ein?

EVENT::Time gibt es auf CPAN nicht. Ich kann mir aber denken, was Dein
Problem ist. Du solltest Dir mal irgendwo einen Text über objektorientierte
Programmierung suchen, am besten mit Perl-Schwerpunkt. Dann wird die
Verwendung von Modulen etwas verständlicher. 

In "Fortgeschrittene Perl-Programmierung" gibt es z.B. ein Kapitel darüber. 
Wenn Du das Buch schon hast, ist das Kapitel über Datenstrukturen ganz am 
Anfang auch recht lohnend als Grundlage. "Perl in a Nutshell" hat am
Anfang des Kapitels mit den Modulen auch ein paar Seiten über Klassen, 
Instanzen und Methoden, aber das scheint mir ziemlich knapp bemessen zu 
sein.  

> Ich beise mir auch noch die Zähne daran aus und halte euch auf dem
> laufenden.

Viel Erfolg. :-)

Fast hätte ich es vergessen. Damit fork() und setsid() funktionieren,
brauchst Du "use POSIX qw(fork setsid);" am Anfang des Scripts.

Ciao,

-martin

-- 
I haven't lost my mind; I'm sure it's backed up on tape somewhere!
---------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an