Gude Markus!
> Vielen Dank auch an dich Martin. Ich habe jetzt zwar ein Modul das das
> Programm zu einem Daemeon macht mit integriert, aber dein
> Vorschlag hat mir sehr viel zum Verständniss eines Daemons gebracht.
Jetzt benutzt Du ein runtergeladenes (nonstandard) Modul, um eine
Funktionalität abzubilden, die in 5 Programmzeilen per Hand zu machen
gewesen wäre.
> ich denke das wäre es dann.
> Wäre nett, wenn jemand noch Tips zur doku (man-page) und
> verständlichkeit
> des programms geben könnte.
Manpage ist gut. Das ist ein ganz normales Script, was man als Unixtippse in
30 Minuten aus dem Stegreif runterhacken und genauso schnell verstehen
können sollte. ;-)
> use Proc::Daemon; # Modul /usr/lib/perl5/Proc-Daemon-0.02$Daemon.pm
Man kann sowas mit ein bißchen eval{} würdevoll abkacken lassen, wenn das
Modul fehlt. Aber wie gesagt, auf das Modul kannst Du hier eigentlich
verzichten.
> sub runTest {
> # abfragen ob prozd schon laeuft.
> open(PSGREP, "ps x |grep prozd-0 | wc -l|") or die
> "Fehler" ;
> $rtest = <PSGREP>; chop $rtest;
> if ($rtest >= 4 ){ #
> $rtest = 3 wenn prozd
> noch nicht lief!
> print " $rtest Abbruch! Prozd lauft schon!\n";
> exit 0;
> }
> else {
> print "hurra\n";
> }
> }
Einfacher wäre wahrscheinlich:
my @procs = `ps ax|grep prozd-0|grep -v grep`;
# Prozeßliste einlesen
my $no_procs = scalar(@procs);
# Array als Skalar evaluiert gibt Anzahl der Elemente
Alternativ: Das ganze gegreppe bleiben lassen und sich die Prozeßliste
selbst anschauen, ist wahrscheinlich zuverlässiger:
my $pcount = 0;
open PIPE, "ps ax|";
while (<PIPE>){
if (/prozd-0/){
die "Wargh!!! Ich laufe schon woanders!\n" if (++$count >
1);
}
}
close PIPE;
Und dabei ist noch nicht geklärt, ob man nicht vielleicht aus Perl selbst
auf die Prozeßliste zugreifen kann, bzw. ob zumindest /proc nicht irgendwo
ein schöneres Interface bietet als dieses fiese "ps". ;-)
Ciao,
-martin
---------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org