--- loncom/loncron 2003/07/30 16:49:27 1.41 +++ loncom/loncron 2003/09/10 19:13:09 1.42 @@ -49,6 +49,128 @@ 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 @@ -316,400 +438,24 @@ print $fh ""; # ---------------------------------------------------------------------- lonsql -my $restartflag=1; - 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) { - $simplestatus{'lonsql'}='off'; - $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

"; - $simplestatus{'lonsql'}='restarted'; - } 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"; +&checkon_daemon($fh,'lonsql',200000); - my ($dev,$ino,$mode,$nlink, - $uid,$gid,$rdev,$size, - $atime,$mtime,$ctime, - $blksize,$blocks)=stat($fname); - - if ($size>200000) { - 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";
+&checkon_daemon($fh,'lond',40000,1);
 
-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) { - $simplestatus{'lond'}='off'; - $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

"; - $simplestatus{'lond'}='restarted'; - } 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"); -} - -&errout($fh); # ------------------------------------------------------------------------ lonc -print $fh '


lonc

Log

';
-print "lonc\n";
+&checkon_daemon($fh,'lonc',40000,1);
 
-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"; - -$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) { - $simplestatus{'lonc'}='off'; - $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

"; - $simplestatus{'lonc'}='restarted'; - } 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 "
"; - } -} - -$fname="$perlvar{'lonDaemons'}/logs/lonc.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); # -------------------------------------------------------------------- lonhttpd -print $fh '


lonhttpd

Log

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

lonhttpd at pid $lonhttpdpid responding

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

lonhttpd at pid $lonhttpdpid 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 lonhttpd

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

lonhttpd not running, trying to start

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

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

lonhttpd at pid $lonhttpdpid responding

"; - $simplestatus{'lonhttpd'}='restarted'; - } else { - $errors++; $errors++; - print $fh "

lonhttpd at pid $lonhttpdpid not responding

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

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

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

";
-    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonhttpd.log|");
-    while ($line=) { 
-      print $fh "$line";
-      if ($line=~/WARNING/) { $notices++; }
-      if ($line=~/CRITICAL/) { $notices++; }
-    };
-    close (DFH);
-    print $fh "
"; - } -} - -$fname="$perlvar{'lonDaemons'}/logs/lonhttpd.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,'lonhttpd',40000); - -&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=) { 
@@ -746,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"; @@ -758,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"; } @@ -767,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

'; @@ -778,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--; } @@ -805,7 +552,7 @@ 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; } @@ -823,7 +570,7 @@ print $sfh "\n"; $sfh->close(); } if ($totalcount>200) { - print "mailing\n"; + print "sending mail\n"; $emailto="$perlvar{'lonAdmEMail'}"; if ($totalcount>1000) { $emailto.=",$perlvar{'lonSysEMail'}";