Hi Liste, hi Martin,
hier die versprochene mail über mein Perl Script. 
Es dient zur Prozessüberwachung eines Systems. In der Testphase sind jetzt
noch einige Meldungen drin die nur zur Funktionsüberprüfung dienen.Genauso
sollte die Delaytime im Betrieb natürlich eher im minutenbereich liegen.

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.
Was jetzt noch für Funktionen dazu kommen sind:
1. Variablen ausles über ein conf.file 
2. Versenden einer Warnmail mit Prio 1 an den Sysadmin.
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.

Gruss Markus



#!/usr/bin/perl
##
##  This program is free software; you can redistribute it and/or
##  modify it under the same terms as Perl itself.
##------------------------------------------------------------------------##
## 
##  prozd: prozess daemon zur prozess Ueberwachung.
##  Schreibt bei einer Ueberschreitung
##  von $max_proz Prozessen diese in eine Log-Datei.
##------------------------------------------------------------------------##


use strict;
use Proc::Daemon;   # Modul /usr/lib/perl5/Proc-Daemon-0.02$Daemon.pm 
                    # Weiter Info unter man(3) Proc::Daemon(pm)
                    #
http://www.perl.com/CPAN-local/modules/by-authors/Earl_Hood


##------------------------------------------------------------------------##
##   Festlegen der VARIABLEN                                                
##
##            
                                                               ##  
my $rtest = 0;
my $befehl1 = "ps -ef";
my $befehl2 = "wc -l";
my $max_proz = 80;              
my $logfile = "/tmp/proz.log";
my $zaehl = 0 ;                    # Prozess-Zähler
my $delay = 10;                    # Verweildauer in Sekunden
my $zeit;

##------------------------------------------------------------------------##
##   SUB runTest: Funktion die den ueberprueft ob prozd schon laueft.       
##
##   Wenn ja dann Abbruch.                                                  
##  

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";
          }
 } 
        




##---------------------------------------------------------------------------##
##   SUB myFunction: Hauptfunktion die den Befehl ps -ef ausliest           
##
##   und in eine Log-Datei schreibt                                         
##  

 
sub myFunction {

           open(DATOUT, ">>$logfile") or die "Can't open $logfile: $!";
           open(INPS, "$befehl1 |" ) or die "Konnte $befehl1 nicht
ausfuehren!\n";
           print DATOUT "\n\n===== $zaehl ==== $zeit  ==== \n\n";     
           while( $_ = <INPS>){ 
                  print DATOUT  "($_) ";
               }
            close (INPS);
            close (DATOUT);

   }


##------------------------------------------------------------------------##
## MAIN PROGRAM                                                             
##

  &runTest;

  Proc::Daemon::init; # initialisiert den Daemon-Prozess

  while (1){                # endlosschleife
          sleep $delay;    

          open(DATE,"date '+Zeit: %H.%M.%S%t%d.%h.' |") or \
               die "Konnte 'date' nicht ausfuehren!\n";
          $zeit = <DATE> ;
          close DATE;
          chomp $zeit;  
          
          open(PSWC,"$befehl1 | $befehl2 |") or \
                die "Konnte Befehl $befehl1 und $befehl2 nicht ausfuehren!\n";
          $zaehl = <PSWC> ;
          close PSWC;
          chomp $zaehl; 

             if ($zaehl >= $max_proz ){
                &myFunktion;
             }
             else {
                open(DATOUT, ">>$logfile") or die "Can't open $logfile!\n";
                print DATOUT  "===== $zaehl ======\n ";

               
           }
             
}

-- 
Sent through GMX FreeMail - http://www.gmx.net

---------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an