#!/usr/bin/perl -w ##################################################################### # Libs # use lib "/betrieb/lib/perl"; use lib "/betrieb/bin"; ##################################################################### # Weg zum Agenten # { use Agentenv; my $ea = Agentenv->new();  my $f=$ea ->lesen();   $f < 0 and die "Kein SSH-AGENT! (" .$ea->fehlertext($f). ")\n";      # xyundef Browser informieren .... } ##################################################################### # Sicherheit # my $secur; { use Sicherheit;  $secur = Sicherheit->new( { secusers => [ "abonaus" ] } ); } ##################################################################### # Logmeldungen #  my $logfile = "$0.log";  my $debuglevel = 7;  my $log;  { use Logmeldungen;    $log = Logmeldungen->new (      { dateiname => "$logfile", zeit => 14400, debuglevel => $debuglevel,        isostempel => 1,      }    );    chmod 0644, $logfile; # world readable  } ##################################################################### # Daemon #  if ( 0 ) # 1 ein / 0 aus  {     # zu Daemon machen:    $secur->daemonisieren();    $SIG{TERM} = sub           { $log->m(2,"SIGTERM erhalten. PID=$$ Exit.");             exit 0;           };  }  {     # stdout zum stderr umlenken:    use POSIX;    defined ( dup2(fileno(STDERR),fileno(STDOUT))) or die "cannot dup2 $!";  } ##################################################################### # Benutzer #        my $soll_user = "abonaus";  {    my $uid  =  (getpwnam($soll_user))[2];    die "Fatal: no user '$soll_user' !\n"       unless ( defined ($uid) and $uid >0  );    ( $>, $< ) = ($uid,$uid);    if ( $< != $> || $> != $uid ) # Test    { $log->m(0,"Probleme mit Benutzer-Rechten: $< $> $uid ");      exit(13);    }  } ##################################################################### # Main # my $default_sleep  = 10; #my $default_sleep  = 1800; my $rwd = "/var/home/abonaus/projekte"; my %match = (   zulu_stati      => [ "$rwd/zulu/autocheck_stati",                                        "wirk_zulu_stati.pl"                                ],                zulu_cc         => [ "$rwd/zulu/autocheck_cc",                                        "wirk_zulu_cc.pl"                                ],                zulu_mc         => [ "$rwd/zulu/autocheck",                                        "wirk_zulu.pl"                                ],                b4t             => [ "$rwd/b4t/autocheck",                                        "wirk_b4t.pl"                                ],                reo             => [ "$rwd/reosv/autocheck",                                        "wirk_reo.pl"                                ],                ); $SIG{CHLD} = sub {                        my $pid = wait();                        $log->m(2,"CHILDHANDLE: Child mit PID -> $pid wird beend et.");                        return 1;                }; while (1) {        $log->m(2,"anfang while");        sleep $sleeptime;        $log->m(2,"nach sleep");        my $ping = `ping [SERVER] 2>&1`;        #my $ping = `ping [SERVER] 2>&1`;        if ($ping !~ /[SERVER] is alive/)        {                $log->m(2,"sleep_und_next: $ping");                $sleeptime = 300;                next;        }        open (IN, "ssh [SERVER] ps -afe | grep wirk | grep -v grep | ") or die ( );        my @in = ;        close IN;        $log->m(2,"Prozesse \n @in");        foreach my $ag (sort keys %match)        {                $log->m(2,"Matche $match{$ag}->[1]");                if (! ($match{$ag}->[2] = grep /$match{$ag}->[1]/, @in))                {                        my $command =                        "cd $match{$ag}->[0]; ./$match{$ag}->[1] \&";                        $log->m(2,"Fehler: Starte $match{$ag}->[1] unter $match{$ag}->[0] ssh [SERVER] $command");                        my $pid = fork;                        #if ($pid != 0)                        #{                                $log->m(2,"Fork Vater: $pid");                        #}                        #else                        if ($pid == 0)                        {                                alarm 20;                                $SIG{'ALRM'} = sub {                                $log->m(2,"Fork Kind: Timeout -> EXIT $match{$ag }->[1]");                                exit;                                };                                $log->m(2,"Fork Kind: $pid");                                my $fehler = system ("ssh [SERVER] \"$command\"" );                                $log->m(2,"Fork Kind: $pid ist wieder Tod !");                                exit;                        }                }        }        $sleeptime = $default_sleep; }