--- loncom/loncron 2005/04/13 18:56:07 1.58 +++ loncom/loncron 2006/02/06 09:08:56 1.66 @@ -2,7 +2,7 @@ # Housekeeping program, started by cron, loncontrol and loncron.pl # -# $Id: loncron,v 1.58 2005/04/13 18:56:07 albertel Exp $ +# $Id: loncron,v 1.66 2006/02/06 09:08:56 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -45,13 +45,13 @@ my $statusdir="/home/httpd/html/lon-stat # -------------------------------------------------- Non-critical communication sub reply { - my ($cmd,$server)=@_; - my $peerfile="$perlvar{'lonSockDir'}/$server"; + my ($cmd,$server,$hostname)=@_; + my $peerfile="$perlvar{'lonSockDir'}/".$hostname->{$server}; my $client=IO::Socket::UNIX->new(Peer =>"$peerfile", Type => SOCK_STREAM, Timeout => 10) or return "con_lost"; - print $client "$cmd\n"; + print $client "sethost:$server:$cmd\n"; my $answer=<$client>; chomp($answer); if (!$answer) { $answer="con_lost"; } @@ -92,14 +92,13 @@ sub start_daemon { rename("$error_fname","$error_fname.1"); } system("$perlvar{'lonDaemons'}/$progname 2>$perlvar{'lonDaemons'}/logs/${daemon}_errors"); - sleep 2; + sleep 1; if (-e $pidfile) { &log($fh,"

Seems like it started ...

"); my $lfh=IO::File->new("$pidfile"); my $daemonpid=<$lfh>; chomp($daemonpid); - sleep 2; - if (kill 0 => $daemonpid) { + if ($daemonpid =~ /^\d+$/ && kill 0 => $daemonpid) { return 1; } else { return 0; @@ -111,8 +110,9 @@ sub start_daemon { } sub checkon_daemon { - my ($fh,$daemon,$maxsize,$sendusr1,$args)=@_; + my ($fh,$daemon,$maxsize,$send,$args)=@_; + my $result; &log($fh,'

'.$daemon.'

Log

'); printf("%-15s ",$daemon); if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){ @@ -135,13 +135,20 @@ sub checkon_daemon { my $lfh=IO::File->new("$pidfile"); $daemonpid=<$lfh>; chomp($daemonpid); - if (kill 0 => $daemonpid) { + if ($daemonpid =~ /^\d+$/ && kill 0 => $daemonpid) { &log($fh,"

$daemon at pid $daemonpid responding"); - if ($sendusr1) { &log($fh,", sending USR1"); } + if ($send) { &log($fh,", sending $send"); } &log($fh,"

"); - if ($sendusr1) { kill USR1 => $daemonpid; } + if ($send eq 'USR1') { kill USR1 => $daemonpid; } + if ($send eq 'USR2') { kill USR2 => $daemonpid; } $restartflag=0; - print "running\n"; + if ($send eq 'USR2') { + $result = 'reloaded'; + print "reloaded\n"; + } else { + $result = 'running'; + print "running\n"; + } } else { $errors++; &log($fh,"

$daemon at pid $daemonpid not responding

"); @@ -156,7 +163,7 @@ sub checkon_daemon { if ($kadaemon eq 'lonmemcached') { $kadaemon='memcached'; } &log($fh,'
Killall '.$daemon.': '. `killall $kadaemon 2>&1`.' - '); - sleep 2; + sleep 1; &log($fh,unlink($pidfile).' - '. `killall -9 $kadaemon 2>&1`. '
'); @@ -165,6 +172,7 @@ sub checkon_daemon { if (&start_daemon($fh,$daemon,$pidfile,$args)) { &log($fh,"

$daemon at pid $daemonpid responding

"); $simplestatus{$daemon}='restarted'; + $result = 'started'; print "started\n"; } else { $errors++; @@ -174,8 +182,10 @@ sub checkon_daemon { if (&start_daemon($fh,$daemon,$pidfile,$args)) { &log($fh,"

$daemon at pid $daemonpid responding

"); $simplestatus{$daemon}='restarted'; + $result = 'started'; print "started\n"; } else { + $result = 'failed'; print " failed\n"; $simplestatus{$daemon}='failed'; $errors++; $errors++; @@ -212,6 +222,7 @@ sub checkon_daemon { } &errout($fh); + return $result; } # --------------------------------------------------------------------- Machine @@ -273,6 +284,16 @@ sub log_machine_info { if ($psproc>200) { $notices++; } if ($psproc>250) { $notices++; } + &log($fh,"

distprobe

"); + &log($fh,"
");
+    open(DSH,"$perlvar{'lonDaemons'}/distprobe |");
+    while (my $line=) { 
+	&log($fh,&encode_entities($line,'<>&"')); 
+	$psproc++;
+    }
+    close(DSH);
+    &log($fh,"
"); + &errout($fh); } @@ -465,7 +486,7 @@ sub test_connections { foreach my $tryserver (sort(keys(%{$hostname}))) { print("."); my $result; - my $answer=reply("ping",$tryserver); + my $answer=reply("ping",$tryserver,$hostname); if ($answer eq "$tryserver:$perlvar{'lonHostID'}") { $result="ok"; $good++; @@ -583,18 +604,24 @@ Options: running, do not send emails do not check the lonc/d connections, do not generate lon-status + --justreload Only tell the daemons to reload the config files, + do not send emails do not + check if the daemons are running, do not + generate lon-status USAGE } # ================================================================ Main Program sub main () { - my ($oldlonc,$help,$justcheckdaemons,$noemail,$justcheckconnections); + my ($oldlonc,$help,$justcheckdaemons,$noemail,$justcheckconnections, + $justreload); &GetOptions("help" => \$help, "oldlonc" => \$oldlonc, "justcheckdaemons" => \$justcheckdaemons, "noemail" => \$noemail, - "justcheckconnections" => \$justcheckconnections + "justcheckconnections" => \$justcheckconnections, + "justreload" => \$justreload ); if ($help) { &usage(); return; } # --------------------------------- Read loncapa_apache.conf and loncapa.conf @@ -664,7 +691,7 @@ sub main () { my $fh; - if (!$justcheckdaemons && !$justcheckconnections) { + if (!$justcheckdaemons && !$justcheckconnections && !$justreload) { $fh=&start_logging(\%hostdom,\%hostrole,\%hostname,\%spareid); &log_machine_info($fh); @@ -673,19 +700,27 @@ sub main () { &check_httpd_logs($fh); &rotate_lonnet_logs($fh); } - if (!$justcheckconnections) { + if (!$justcheckconnections && !$justreload) { &checkon_daemon($fh,'lonsql',200000); - &checkon_daemon($fh,'lond',40000,1); + if ( &checkon_daemon($fh,'lond',40000,'USR1') eq 'running') { + &checkon_daemon($fh,'lond',40000,'USR2'); + } my $args='new'; if ($oldlonc) { $args = ''; } - &checkon_daemon($fh,'lonc',40000,1,$args); + &checkon_daemon($fh,'lonc',40000,'USR2',$args); &checkon_daemon($fh,'lonhttpd',40000); &checkon_daemon($fh,'lonmemcached',40000); } - if (!$justcheckdaemons) { + if ($justreload) { + &checkon_daemon($fh,'lond',40000,'USR2'); + my $args='new'; + if ($oldlonc) { $args = ''; } + &checkon_daemon($fh,'lonc',40000,'USR2',$args); + } + if ($justcheckconnections) { &test_connections($fh,\%hostname); } - if (!$justcheckdaemons && !$justcheckconnections) { + if (!$justcheckdaemons && !$justcheckconnections && !$justreload) { &check_delayed_msg($fh); &finish_logging($fh); &log_simplestatus(); 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.