--- loncom/loncron 2002/07/27 19:06:41 1.32 +++ loncom/loncron 2003/09/10 19:13:09 1.42 @@ -9,13 +9,9 @@ # # 7/14,7/15,7/19,7/21,7/22,11/18, # 2/8 Gerd Kortemeyer -# 12/6/2000,12/8 Scott Harrison # 12/23 Gerd Kortemeyer # YEAR=2001 -# 1/10/2001, 2/12/, 2/26, 3/15, 04/11, 04/21,8/27 Scott Harrison # 09/04,09/06,11/26 Gerd Kortemeyer -# YEAR=2002 -# 5/11/2002 Scott Harrison $|=1; @@ -53,11 +49,132 @@ sub errout { ENDERROUT } +sub start_daemon { + my ($fh,$daemon,$pidfile) = @_; + system("$perlvar{'lonDaemons'}/$daemon 2>>$perlvar{'lonDaemons'}/logs/${daemon}_errors"); + sleep 2; + if (-e $pidfile) { + print $fh "Seems like it started ...

"; + my $lfh=IO::File->new("$pidfile"); + my $daemonpid=<$lfh>; + chomp($daemonpid); + sleep 2; + if (kill 0 => $daemonpid) { + return 1; + } else { + return 0; + } + } + print $fh "Seems like that did not work!

"; + $errors++; + return 0; +} + +sub checkon_daemon { + my ($fh,$daemon,$maxsize,$sendusr1)=@_; + + print $fh '


'.$daemon.'

Log

';
+    printf("%-10s ",$daemon);
+    if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){
+	open (DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/$daemon.log|");
+	while ($line=) { 
+	    print $fh "$line";
+	    if ($line=~/INFO/) { $notices++; }
+	    if ($line=~/WARNING/) { $notices++; }
+	    if ($line=~/CRITICAL/) { $warnings++; }
+	};
+	close (DFH);
+    }
+    print $fh "
"; + + my $pidfile="$perlvar{'lonDaemons'}/logs/$daemon.pid"; + + my $restartflag=1; + + if (-e $pidfile) { + my $lfh=IO::File->new("$pidfile"); + my $daemonpid=<$lfh>; + chomp($daemonpid); + if (kill 0 => $daemonpid) { + print $fh "

$daemon at pid $daemonpid responding"; + if ($sendusr1) { print $fh ", sending USR1"; } + print $fh "

"; + if ($sendusr1) { kill USR1 => $daemonpid; } + $restartflag=0; + print "running\n"; + } else { + $errors++; + print $fh "

$daemon at pid $daemonpid not responding

"; + $restartflag=1; + print $fh "

Decided to clean up stale .pid file and restart $daemon

"; + } + } + if ($restartflag==1) { + $simplestatus{$daemon}='off'; + $errors++; + print $fh '
Killall '.$daemon.': '. + `killall $daemon 2>&1`.' - '; + sleep 2; + print $fh unlink($pidfile).' - '. + `killall -9 $daemon 2>&1`. + '
'; + print $fh "

$daemon not running, trying to start

"; + + if (&start_daemon($fh,$daemon,$pidfile)) { + print $fh "

$daemon at pid $daemonpid responding

"; + $simplestatus{$daemon}='restarted'; + print "started\n"; + } else { + $errors++; + print $fh "

$daemon at pid $daemonpid not responding

"; + print $fh "Give it one more try ...

"; + print " "; + if (&start_daemon($fh,$daemon,$pidfile)) { + print $fh "

$daemon at pid $daemonpid responding

"; + $simplestatus{$daemon}='restarted'; + print "started\n"; + } else { + print " failed\n"; + $simplestatus{$daemon}='failed'; + $errors++; $errors++; + print $fh "

$daemon at pid $daemonpid not responding

"; + print $fh "Unable to start $daemon

"; + } + } + + if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){ + print $fh "

";
+	    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/$daemon.log|");
+	    while ($line=) { 
+		print $fh "$line";
+		if ($line=~/WARNING/) { $notices++; }
+		if ($line=~/CRITICAL/) { $notices++; }
+	    };
+	    close (DFH);
+	    print $fh "
"; + } + } + + $fname="$perlvar{'lonDaemons'}/logs/$daemon.log"; + + my ($dev,$ino,$mode,$nlink, + $uid,$gid,$rdev,$size, + $atime,$mtime,$ctime, + $blksize,$blocks)=stat($fname); + + if ($size>$maxsize) { + print $fh "Rotating logs ...

"; + rename("$fname.2","$fname.3"); + rename("$fname.1","$fname.2"); + rename("$fname","$fname.1"); + } + + &errout($fh); +} # ================================================================ Main Program # --------------------------------- Read loncapa_apache.conf and loncapa.conf -my $perlvarref=LONCAPA::Configuration::read_conf('loncapa_apache.conf', - 'loncapa.conf'); +my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf'); %perlvar=%{$perlvarref}; undef $perlvarref; delete $perlvar{'lonReceipt'}; # remove since sensitive and not needed @@ -136,6 +253,7 @@ $date=localtime($now); { my $fh=IO::File->new(">$statusdir/newstatus.html"); +my %simplestatus=(); print $fh (< @@ -155,6 +273,7 @@ print $fh (<lonsql

  • lond
  • lonc +
  • lonhttpd
  • lonnet
  • Connections
  • Delayed Messages @@ -220,7 +339,7 @@ while ($line=) { } elsif ($usage>60) { $notices++; } - if ($usage>95) { $warnings++; $warnings++ } + if ($usage>95) { $warnings++; $warnings++; $simplestatus{'diskfull'}++; } } close (DFH); print $fh ""; @@ -319,299 +438,24 @@ print $fh ""; # ---------------------------------------------------------------------- lonsql -my $restartflag=1; -if ($perlvar{'lonRole'} eq "library") { +&checkon_daemon($fh,'lonsql',200000); - print $fh '

    lonsql

    Log

    ';
    -    print "lonsql\n";
    -    if (-e "$perlvar{'lonDaemons'}/logs/lonsql.log"){
    -	open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonsql.log|");
    -	while ($line=) { 
    -	    print $fh "$line";
    -	    if ($line=~/INFO/) { $notices++; }
    -	    if ($line=~/WARNING/) { $notices++; }
    -	    if ($line=~/CRITICAL/) { $warnings++; }
    -	};
    -	close (DFH);
    -    }
    -    print $fh "
    "; - - my $lonsqlfile="$perlvar{'lonDaemons'}/logs/lonsql.pid"; - - $restartflag=1; - - if (-e $lonsqlfile) { - my $lfh=IO::File->new("$lonsqlfile"); - my $lonsqlpid=<$lfh>; - chomp($lonsqlpid); - if (kill 0 => $lonsqlpid) { - print $fh "

    lonsql at pid $lonsqlpid responding

    "; - $restartflag=0; - } else { - $errors++; $errors++; - print $fh "

    lonsql at pid $lonsqlpid not responding

    "; - $restartflag=1; - print $fh - "

    Decided to clean up stale .pid file and restart lonsql

    "; - } - } - if ($restartflag==1) { - $errors++; - print $fh '
    Killall lonsql: '. - system('killall lonsql').' - '; - sleep 2; - print $fh unlink($lonsqlfile).' - '. - system('killall -9 lonsql'). - '
    '; - print $fh "

    lonsql not running, trying to start

    "; - system( - "$perlvar{'lonDaemons'}/lonsql 2>>$perlvar{'lonDaemons'}/logs/lonsql_errors"); - sleep 2; - if (-e $lonsqlfile) { - print $fh "Seems like it started ...

    "; - my $lfh=IO::File->new("$lonsqlfile"); - my $lonsqlpid=<$lfh>; - chomp($lonsqlpid); - sleep 2; - if (kill 0 => $lonsqlpid) { - print $fh "

    lonsql at pid $lonsqlpid responding

    "; - } else { - $errors++; $errors++; - print $fh "

    lonsql at pid $lonsqlpid not responding

    "; - print $fh "Give it one more try ...

    "; - system( - "$perlvar{'lonDaemons'}/lonsql 2>>$perlvar{'lonDaemons'}/logs/lonsql_errors"); - sleep 2; - } - } else { - print $fh "Seems like that did not work!

    "; - $errors++; - } - if (-e "$perlvar{'lonDaemons'}/logs/lonsql.log"){ - print $fh "

    ";
    -	    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonsql.log|");
    -	    while ($line=) { 
    -		print $fh "$line";
    -		if ($line=~/WARNING/) { $notices++; }
    -		if ($line=~/CRITICAL/) { $notices++; }
    -	    };
    -	    close (DFH);
    -	    print $fh "
    "; - } - } - - $fname="$perlvar{'lonDaemons'}/logs/lonsql.log"; - - my ($dev,$ino,$mode,$nlink, - $uid,$gid,$rdev,$size, - $atime,$mtime,$ctime, - $blksize,$blocks)=stat($fname); - - if ($size>40000) { - print $fh "Rotating logs ...

    "; - rename("$fname.2","$fname.3"); - rename("$fname.1","$fname.2"); - rename("$fname","$fname.1"); - } - - &errout($fh); -} # ------------------------------------------------------------------------ lond -print $fh '


    lond

    Log

    ';
    -print "lond\n";
    -
    -if (-e "$perlvar{'lonDaemons'}/logs/lond.log"){
    -open (DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/lond.log|");
    -while ($line=) { 
    -   print $fh "$line";
    -   if ($line=~/INFO/) { $notices++; }
    -   if ($line=~/WARNING/) { $notices++; }
    -   if ($line=~/CRITICAL/) { $warnings++; }
    -};
    -close (DFH);
    -}
    -print $fh "
    "; - -my $londfile="$perlvar{'lonDaemons'}/logs/lond.pid"; - -$restartflag=1; -if (-e $londfile) { - my $lfh=IO::File->new("$londfile"); - my $londpid=<$lfh>; - chomp($londpid); - if (kill 0 => $londpid) { - print $fh "

    lond at pid $londpid responding, sending USR1

    "; - kill USR1 => $londpid; - $restartflag=0; - } else { - $errors++; - print $fh "

    lond at pid $londpid not responding

    "; - $restartflag=1; - print $fh - "

    Decided to clean up stale .pid file and restart lond

    "; - } -} -if ($restartflag==1) { - $errors++; - print $fh '
    Killall lond: '. - system('killall lond').' - '; - sleep 2; - print $fh unlink($londfile).' - '.system('killall -9 lond'). - '
    '; - print $fh "

    lond not running, trying to start

    "; - system( - "$perlvar{'lonDaemons'}/lond 2>>$perlvar{'lonDaemons'}/logs/lond_errors"); - sleep 2; - if (-e $londfile) { - print $fh "Seems like it started ...

    "; - my $lfh=IO::File->new("$londfile"); - my $londpid=<$lfh>; - chomp($londpid); - sleep 2; - if (kill 0 => $londpid) { - print $fh "

    lond at pid $londpid responding

    "; - } else { - $errors++; $errors++; - print $fh "

    lond at pid $londpid not responding

    "; - print $fh "Give it one more try ...

    "; - system( - "$perlvar{'lonDaemons'}/lond 2>>$perlvar{'lonDaemons'}/logs/lond_errors"); - sleep 2; - } - } else { - print $fh "Seems like that did not work!

    "; - $errors++; - } - if (-e "$perlvar{'lonDaemons'}/logs/lond.log"){ - print $fh "

    ";
    -    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lond.log|");
    -    while ($line=) { 
    -      print $fh "$line";
    -      if ($line=~/WARNING/) { $notices++; }
    -      if ($line=~/CRITICAL/) { $notices++; }
    -    };
    -    close (DFH);
    -    print $fh "
    "; - } -} - -$fname="$perlvar{'lonDaemons'}/logs/lond.log"; - - my ($dev,$ino,$mode,$nlink, - $uid,$gid,$rdev,$size, - $atime,$mtime,$ctime, - $blksize,$blocks)=stat($fname); - -if ($size>40000) { - print $fh "Rotating logs ...

    "; - rename("$fname.2","$fname.3"); - rename("$fname.1","$fname.2"); - rename("$fname","$fname.1"); -} +&checkon_daemon($fh,'lond',40000,1); -&errout($fh); # ------------------------------------------------------------------------ lonc -print $fh '


    lonc

    Log

    ';
    -print "lonc\n";
    -
    -if (-e "$perlvar{'lonDaemons'}/logs/lonc.log"){
    -open (DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/lonc.log|");
    -while ($line=) { 
    -   print $fh "$line";
    -   if ($line=~/INFO/) { $notices++; }
    -   if ($line=~/WARNING/) { $notices++; }
    -   if ($line=~/CRITICAL/) { $warnings++; }
    -};
    -close (DFH);
    -}
    -print $fh "
    "; - -my $loncfile="$perlvar{'lonDaemons'}/logs/lonc.pid"; +&checkon_daemon($fh,'lonc',40000,1); -$restartflag=1; -if (-e $loncfile) { - my $lfh=IO::File->new("$loncfile"); - my $loncpid=<$lfh>; - chomp($loncpid); - if (kill 0 => $loncpid) { - print $fh "

    lonc at pid $loncpid responding, sending USR1

    "; - kill USR1 => $loncpid; - $restartflag=0; - } else { - $errors++; - print $fh "

    lonc at pid $loncpid not responding

    "; - # Solution: kill parent and children processes, remove .pid and restart - $restartflag=1; - print $fh - "

    Decided to clean up stale .pid file and restart lonc

    "; - } -} -if ($restartflag==1) { - $errors++; - print $fh '
    Killall lonc: '. - system('killall lonc').' - '; - sleep 2; - print $fh unlink($loncfile).' - '.system('killall -9 lonc'). - '
    '; - print $fh "

    lonc not running, trying to start

    "; - system( - "$perlvar{'lonDaemons'}/lonc 2>>$perlvar{'lonDaemons'}/logs/lonc_errors"); - sleep 2; - if (-e $loncfile) { - print $fh "Seems like it started ...

    "; - my $lfh=IO::File->new("$loncfile"); - my $loncpid=<$lfh>; - chomp($loncpid); - sleep 2; - if (kill 0 => $loncpid) { - print $fh "

    lonc at pid $loncpid responding

    "; - } else { - $errors++; $errors++; - print $fh "

    lonc at pid $loncpid not responding

    "; - print $fh "Give it one more try ...

    "; - system( - "$perlvar{'lonDaemons'}/lonc 2>>$perlvar{'lonDaemons'}/logs/lonc_errors"); - sleep 2; - } - } else { - print $fh "Seems like that did not work!

    "; - $errors++; - } - if (-e "$perlvar{'lonDaemons'}/logs/lonc.log") { - print $fh "

    ";
    -    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonc.log|");
    -    while ($line=) { 
    -      print $fh "$line";
    -      if ($line=~/WARNING/) { $notices++; }
    -      if ($line=~/CRITICAL/) { $notices++; }
    -    };
    -    close (DFH);
    -    print $fh "
    "; - } -} +# -------------------------------------------------------------------- lonhttpd -$fname="$perlvar{'lonDaemons'}/logs/lonc.log"; +&checkon_daemon($fh,'lonhttpd',40000); - my ($dev,$ino,$mode,$nlink, - $uid,$gid,$rdev,$size, - $atime,$mtime,$ctime, - $blksize,$blocks)=stat($fname); - -if ($size>40000) { - print $fh "Rotating logs ...

    "; - rename("$fname.2","$fname.3"); - rename("$fname.1","$fname.2"); - rename("$fname","$fname.1"); -} - - -&errout($fh); # ---------------------------------------------------------------------- lonnet print $fh '


    lonnet

    Temp Log

    ';
    -print "lonnet\n";
    +print "checking logs\n";
     if (-e "$perlvar{'lonDaemons'}/logs/lonnet.log"){
     open (DFH,"tail -n50 $perlvar{'lonDaemons'}/logs/lonnet.log|");
     while ($line=) { 
    @@ -648,10 +492,10 @@ print $fh "
    "; # ----------------------------------------------------------------- Connections print $fh '

    Connections

    '; - +print "testing connections\n"; print $fh ""; foreach $tryserver (sort(keys(%hostname))) { - + print("."); $answer=reply("pong",$tryserver); if ($answer eq "$tryserver:$perlvar{'lonHostID'}") { $result="ok"; @@ -660,6 +504,7 @@ foreach $tryserver (sort(keys(%hostname) $warnings++; if ($answer eq 'con_lost') { $warnings++; } } + if ($answer =~ /con_lost/) { print(" $tryserver down\n"); } print $fh "\n"; } @@ -669,7 +514,7 @@ print $fh "
    $tryserver$result
    "; # ------------------------------------------------------------ Delayed messages print $fh '

    Delayed Messages

    '; -print "buffers\n"; +print "checking buffers\n"; print $fh '

    Scanning Permanent Log

    '; @@ -680,7 +525,7 @@ $unsend=0; ($time,$sdf,$dserv,$dcmd)=split(/:/,$line); if ($sdf eq 'F') { $local=localtime($time); - print "Failed: $time, $dserv, $dcmd
    "; + print $fh "Failed: $time, $dserv, $dcmd
    "; $warnings++; } if ($sdf eq 'S') { $unsend--; } @@ -690,6 +535,7 @@ $unsend=0; print $fh "Total unsend messages: $unsend

    \n"; $warnings=$warnings+5*$unsend; +if ($unsend) { $simplestatus{'unsend'}=$unsend; } print $fh "

    Outgoing Buffer

    "; open (DFH,"ls -lF $perlvar{'lonSockDir'}/delayed|"); @@ -706,14 +552,29 @@ print $fh "

    Total Error Count: $total $now=time; $date=localtime($now); print $fh "
    $date ($now)\n"; -print "writing done\n"; +print "lon-status webpage updated\n"; +$fh->close(); } +if ($errors) { $simplestatus{'errors'}=$errors; } +if ($warnings) { $simplestatus{'warnings'}=$warnings; } +if ($notices) { $simplestatus{'notices'}=$notices; } +$simplestatus{'time'}=time; rename ("$statusdir/newstatus.html","$statusdir/index.html"); - +{ +my $sfh=IO::File->new(">$statusdir/loncron_simple.txt"); +foreach (keys %simplestatus) { + print $sfh $_.'='.$simplestatus{$_}.'&'; +} +print $sfh "\n"; +$sfh->close(); +} if ($totalcount>200) { - print "mailing\n"; - $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}"; + print "sending mail\n"; + $emailto="$perlvar{'lonAdmEMail'}"; + if ($totalcount>1000) { + $emailto.=",$perlvar{'lonSysEMail'}"; + } $subj="LON: $perlvar{'lonHostID'} E:$errors W:$warnings N:$notices"; system( "metasend -b -t $emailto -s '$subj' -f $statusdir/index.html -m text/html");