Diff for /loncom/loncron between versions 1.59 and 1.71

version 1.59, 2005/05/26 20:25:00 version 1.71, 2007/04/03 00:47:26
Line 45  my $statusdir="/home/httpd/html/lon-stat Line 45  my $statusdir="/home/httpd/html/lon-stat
   
 # -------------------------------------------------- Non-critical communication  # -------------------------------------------------- Non-critical communication
 sub reply {  sub reply {
     my ($cmd,$server)=@_;      my ($cmd,$server,$hostname)=@_;
     my $peerfile="$perlvar{'lonSockDir'}/$server";      my $peerfile="$perlvar{'lonSockDir'}/".$hostname->{$server};
     my $client=IO::Socket::UNIX->new(Peer    =>"$peerfile",      my $client=IO::Socket::UNIX->new(Peer    =>"$peerfile",
                                      Type    => SOCK_STREAM,                                       Type    => SOCK_STREAM,
                                      Timeout => 10)                                       Timeout => 10)
        or return "con_lost";         or return "con_lost";
     print $client "$cmd\n";      print $client "sethost:$server:$cmd\n";
     my $answer=<$client>;      my $answer=<$client>;
     chomp($answer);      chomp($answer);
     if (!$answer) { $answer="con_lost"; }      if (!$answer) { $answer="con_lost"; }
Line 79  ENDERROUT Line 79  ENDERROUT
 sub start_daemon {  sub start_daemon {
     my ($fh,$daemon,$pidfile,$args) = @_;      my ($fh,$daemon,$pidfile,$args) = @_;
     my $progname=$daemon;      my $progname=$daemon;
     if ($daemon eq 'lonc' && $args eq 'new') {      if ($daemon eq 'lonc') {
  $progname='loncnew';    $progname='loncnew'; 
  print "new ";  
     }      }
     my $error_fname="$perlvar{'lonDaemons'}/logs/${daemon}_errors";      my $error_fname="$perlvar{'lonDaemons'}/logs/${daemon}_errors";
     my $size=(stat($error_fname))[7];      my $size=(stat($error_fname))[7];
Line 92  sub start_daemon { Line 91  sub start_daemon {
  rename("$error_fname","$error_fname.1");   rename("$error_fname","$error_fname.1");
     }      }
     system("$perlvar{'lonDaemons'}/$progname 2>$perlvar{'lonDaemons'}/logs/${daemon}_errors");      system("$perlvar{'lonDaemons'}/$progname 2>$perlvar{'lonDaemons'}/logs/${daemon}_errors");
     sleep 2;      sleep 1;
     if (-e $pidfile) {      if (-e $pidfile) {
  &log($fh,"<p>Seems like it started ...</p>");   &log($fh,"<p>Seems like it started ...</p>");
  my $lfh=IO::File->new("$pidfile");   my $lfh=IO::File->new("$pidfile");
  my $daemonpid=<$lfh>;   my $daemonpid=<$lfh>;
  chomp($daemonpid);   chomp($daemonpid);
  sleep 2;   if ($daemonpid =~ /^\d+$/ && kill 0 => $daemonpid) {
  if (kill 0 => $daemonpid) {  
     return 1;      return 1;
  } else {   } else {
     return 0;      return 0;
Line 113  sub start_daemon { Line 111  sub start_daemon {
 sub checkon_daemon {  sub checkon_daemon {
     my ($fh,$daemon,$maxsize,$send,$args)=@_;      my ($fh,$daemon,$maxsize,$send,$args)=@_;
   
       my $result;
     &log($fh,'<hr /><a name="'.$daemon.'" /><h2>'.$daemon.'</h2><h3>Log</h3><p style="white-space: pre;"><tt>');      &log($fh,'<hr /><a name="'.$daemon.'" /><h2>'.$daemon.'</h2><h3>Log</h3><p style="white-space: pre;"><tt>');
     printf("%-15s ",$daemon);      printf("%-15s ",$daemon);
     if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){      if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){
Line 135  sub checkon_daemon { Line 134  sub checkon_daemon {
  my $lfh=IO::File->new("$pidfile");   my $lfh=IO::File->new("$pidfile");
  $daemonpid=<$lfh>;   $daemonpid=<$lfh>;
  chomp($daemonpid);   chomp($daemonpid);
  if (kill 0 => $daemonpid) {   if ($daemonpid =~ /^\d+$/ && kill 0 => $daemonpid) {
     &log($fh,"<h3>$daemon at pid $daemonpid responding");      &log($fh,"<h3>$daemon at pid $daemonpid responding");
     if ($send) { &log($fh,", sending $send"); }      if ($send) { &log($fh,", sending $send"); }
     &log($fh,"</h3>");      &log($fh,"</h3>");
Line 143  sub checkon_daemon { Line 142  sub checkon_daemon {
     if ($send eq 'USR2') { kill USR2 => $daemonpid; }      if ($send eq 'USR2') { kill USR2 => $daemonpid; }
     $restartflag=0;      $restartflag=0;
     if ($send eq 'USR2') {      if ($send eq 'USR2') {
    $result = 'reloaded';
  print "reloaded\n";   print "reloaded\n";
     } else {      } else {
    $result = 'running';
  print "running\n";   print "running\n";
     }      }
  } else {   } else {
Line 161  sub checkon_daemon { Line 162  sub checkon_daemon {
  if ($kadaemon eq 'lonmemcached') { $kadaemon='memcached'; }   if ($kadaemon eq 'lonmemcached') { $kadaemon='memcached'; }
  &log($fh,'<br><font color="red">Killall '.$daemon.': '.   &log($fh,'<br><font color="red">Killall '.$daemon.': '.
     `killall $kadaemon 2>&1`.' - ');      `killall $kadaemon 2>&1`.' - ');
  sleep 2;   sleep 1;
  &log($fh,unlink($pidfile).' - '.   &log($fh,unlink($pidfile).' - '.
     `killall -9 $kadaemon 2>&1`.      `killall -9 $kadaemon 2>&1`.
     '</font><br>');      '</font><br>');
Line 170  sub checkon_daemon { Line 171  sub checkon_daemon {
  if (&start_daemon($fh,$daemon,$pidfile,$args)) {   if (&start_daemon($fh,$daemon,$pidfile,$args)) {
     &log($fh,"<h3>$daemon at pid $daemonpid responding</h3>");      &log($fh,"<h3>$daemon at pid $daemonpid responding</h3>");
     $simplestatus{$daemon}='restarted';      $simplestatus{$daemon}='restarted';
       $result = 'started';
     print "started\n";      print "started\n";
  } else {   } else {
     $errors++;      $errors++;
Line 179  sub checkon_daemon { Line 181  sub checkon_daemon {
     if (&start_daemon($fh,$daemon,$pidfile,$args)) {      if (&start_daemon($fh,$daemon,$pidfile,$args)) {
  &log($fh,"<h3>$daemon at pid $daemonpid responding</h3>");   &log($fh,"<h3>$daemon at pid $daemonpid responding</h3>");
  $simplestatus{$daemon}='restarted';   $simplestatus{$daemon}='restarted';
    $result = 'started';
  print "started\n";   print "started\n";
     } else {      } else {
    $result = 'failed';
  print " failed\n";   print " failed\n";
  $simplestatus{$daemon}='failed';   $simplestatus{$daemon}='failed';
  $errors++; $errors++;   $errors++; $errors++;
Line 217  sub checkon_daemon { Line 221  sub checkon_daemon {
     }      }
   
     &errout($fh);      &errout($fh);
       return $result;
 }  }
   
 # --------------------------------------------------------------------- Machine  # --------------------------------------------------------------------- Machine
Line 278  sub log_machine_info { Line 283  sub log_machine_info {
     if ($psproc>200) { $notices++; }      if ($psproc>200) { $notices++; }
     if ($psproc>250) { $notices++; }      if ($psproc>250) { $notices++; }
   
       &log($fh,"<h3>distprobe</h3>");
       &log($fh,"<pre>");
       open(DSH,"$perlvar{'lonDaemons'}/distprobe |");
       while (my $line=<DSH>) { 
    &log($fh,&encode_entities($line,'<>&"')); 
    $psproc++;
       }
       close(DSH);
       &log($fh,"</pre>");
   
     &errout($fh);      &errout($fh);
 }  }
   
Line 470  sub test_connections { Line 485  sub test_connections {
     foreach my $tryserver (sort(keys(%{$hostname}))) {      foreach my $tryserver (sort(keys(%{$hostname}))) {
  print(".");   print(".");
  my $result;   my $result;
  my $answer=reply("ping",$tryserver);   my $answer=&reply("ping",$tryserver,$hostname);
  if ($answer eq "$tryserver:$perlvar{'lonHostID'}") {   if ($answer eq "$tryserver:$perlvar{'lonHostID'}") {
     $result="<b>ok</b>";      $result="<b>ok</b>";
     $good++;      $good++;
Line 495  sub test_connections { Line 510  sub test_connections {
   
 # ------------------------------------------------------------ Delayed messages  # ------------------------------------------------------------ Delayed messages
 sub check_delayed_msg {  sub check_delayed_msg {
     my ($fh)=@_;      my ($fh,$hostname)=@_;
     &log($fh,'<hr /><a name="delayed" /><h2>Delayed Messages</h2>');      &log($fh,'<hr /><a name="delayed" /><h2>Delayed Messages</h2>');
     print "checking buffers\n";      print "checking buffers\n";
           
Line 520  sub check_delayed_msg { Line 535  sub check_delayed_msg {
   
     if ($unsend) { $simplestatus{'unsend'}=$unsend; }      if ($unsend) { $simplestatus{'unsend'}=$unsend; }
     &log($fh,"<h3>Outgoing Buffer</h3>\n<pre>");      &log($fh,"<h3>Outgoing Buffer</h3>\n<pre>");
   # list directory with delayed messages and remember offline servers
       my %servers=();
     open (DFH,"ls -lF $perlvar{'lonSockDir'}/delayed|");      open (DFH,"ls -lF $perlvar{'lonSockDir'}/delayed|");
     while (my $line=<DFH>) {       while (my $line=<DFH>) {
           my ($server)=($line=~/\.(\w+)$/);
           if ($server) { $servers{$server}=1; }
  &log($fh,&encode_entities($line,'<>&"'));   &log($fh,&encode_entities($line,'<>&"'));
     }      }
     &log($fh,"</pre>\n");      &log($fh,"</pre>\n");
     close (DFH);      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<br />");
       }
 }  }
   
 sub finish_logging {  sub finish_logging {
Line 577  sub usage { Line 601  sub usage {
 loncron - housekeeping program that checks up on various parts of Lon-CAPA  loncron - housekeeping program that checks up on various parts of Lon-CAPA
   
 Options:  Options:
    --help     Display help     --help     Display 
    --oldlonc  When starting the lonc daemon use 'lonc' not 'loncnew'  
    --noemail  Do not send the status email     --noemail  Do not send the status email
    --justcheckconnections  Only check the current status of the lonc/d     --justcheckconnections  Only check the current status of the lonc/d
                                 connections, do not send emails do not                                  connections, do not send emails do not
Line 598  USAGE Line 621  USAGE
   
 # ================================================================ Main Program  # ================================================================ Main Program
 sub main () {  sub main () {
     my ($oldlonc,$help,$justcheckdaemons,$noemail,$justcheckconnections,      my ($help,$justcheckdaemons,$noemail,$justcheckconnections,
  $justreload);   $justreload);
     &GetOptions("help"                 => \$help,      &GetOptions("help"                 => \$help,
  "oldlonc"              => \$oldlonc,  
  "justcheckdaemons"     => \$justcheckdaemons,   "justcheckdaemons"     => \$justcheckdaemons,
  "noemail"              => \$noemail,   "noemail"              => \$noemail,
  "justcheckconnections" => \$justcheckconnections,   "justcheckconnections" => \$justcheckconnections,
Line 686  sub main () { Line 708  sub main () {
     }      }
     if (!$justcheckconnections && !$justreload) {      if (!$justcheckconnections && !$justreload) {
  &checkon_daemon($fh,'lonsql',200000);   &checkon_daemon($fh,'lonsql',200000);
  &checkon_daemon($fh,'lond',40000,'USR1');   if ( &checkon_daemon($fh,'lond',40000,'USR1') eq 'running') {
  my $args='new';      &checkon_daemon($fh,'lond',40000,'USR2');
  if ($oldlonc) { $args = ''; }   }
  &checkon_daemon($fh,'lonc',40000,'USR1',$args);   &checkon_daemon($fh,'lonc',40000,'USR1');
  &checkon_daemon($fh,'lonhttpd',40000);   &checkon_daemon($fh,'lonhttpd',40000);
  &checkon_daemon($fh,'lonmemcached',40000);   &checkon_daemon($fh,'lonmemcached',40000);
           &checkon_daemon($fh,'lonmaxima',40000);
     }      }
     if ($justreload) {      if ($justreload) {
  &checkon_daemon($fh,'lond',40000,'USR2');   &checkon_daemon($fh,'lond',40000,'USR2');
  my $args='new';   &checkon_daemon($fh,'lonc',40000,'USR2');
  if ($oldlonc) { $args = ''; }  
  &checkon_daemon($fh,'lonc',40000,'USR2',$args);  
     }      }
     if (!$justcheckdaemons && !$justreload) {      if ($justcheckconnections) {
  &test_connections($fh,\%hostname);   &test_connections($fh,\%hostname);
     }      }
     if (!$justcheckdaemons && !$justcheckconnections && !$justreload) {      if (!$justcheckdaemons && !$justcheckconnections && !$justreload) {
  &check_delayed_msg($fh);   &check_delayed_msg($fh,\%hostname);
  &finish_logging($fh);   &finish_logging($fh);
  &log_simplestatus();   &log_simplestatus();
   

Removed from v.1.59  
changed lines
  Added in v.1.71


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>