--- loncom/loncron 2006/01/28 10:03:37 1.65 +++ loncom/loncron 2006/11/01 21:08:06 1.69 @@ -2,7 +2,7 @@ # Housekeeping program, started by cron, loncontrol and loncron.pl # -# $Id: loncron,v 1.65 2006/01/28 10:03:37 albertel Exp $ +# $Id: loncron,v 1.69 2006/11/01 21:08:06 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -486,7 +486,7 @@ sub test_connections { foreach my $tryserver (sort(keys(%{$hostname}))) { print("."); my $result; - my $answer=reply("ping",$tryserver,$hostname); + my $answer=&reply("ping",$tryserver,$hostname); if ($answer eq "$tryserver:$perlvar{'lonHostID'}") { $result="ok"; $good++; @@ -511,7 +511,7 @@ sub test_connections { # ------------------------------------------------------------ Delayed messages sub check_delayed_msg { - my ($fh)=@_; + my ($fh,$hostname)=@_; &log($fh,'

Delayed Messages

'); print "checking buffers\n"; @@ -536,13 +536,22 @@ sub check_delayed_msg { if ($unsend) { $simplestatus{'unsend'}=$unsend; } &log($fh,"

Outgoing Buffer

\n
");
-
+# list directory with delayed messages and remember offline servers
+    my %servers=();
     open (DFH,"ls -lF $perlvar{'lonSockDir'}/delayed|");
-    while (my $line=) { 
+    while (my $line=) {
+        my ($server)=($line=~/\.(\w+)$/);
+        if ($server) { $servers{$server}=1; }
 	&log($fh,&encode_entities($line,'<>&"'));
     }
     &log($fh,"
\n"); close (DFH); +# pong to all servers that have delayed messages +# this will trigger a reverse connection, which should flush the buffers + foreach my $tryserver (keys %servers) { + my $answer=&reply("pong",$tryserver,$hostname); + &log($fh,"Pong to $tryserver: $answer
"); + } } sub finish_logging { @@ -707,9 +716,7 @@ sub main () { } my $args='new'; if ($oldlonc) { $args = ''; } - if ( &checkon_daemon($fh,'lonc',40000,'USR1',$args) eq 'running') { - &checkon_daemon($fh,'lonc',40000,'USR2',$args); - } + &checkon_daemon($fh,'lonc',40000,'USR1',$args); &checkon_daemon($fh,'lonhttpd',40000); &checkon_daemon($fh,'lonmemcached',40000); } @@ -723,7 +730,7 @@ sub main () { &test_connections($fh,\%hostname); } if (!$justcheckdaemons && !$justcheckconnections && !$justreload) { - &check_delayed_msg($fh); + &check_delayed_msg($fh,\%hostname); &finish_logging($fh); &log_simplestatus();