Diff for /loncom/lond between versions 1.61 and 1.66

version 1.61, 2001/12/20 17:43:05 version 1.66, 2002/02/05 18:05:47
Line 45 Line 45
 # 9/30,10/22,11/13,11/15,11/16 Scott Harrison  # 9/30,10/22,11/13,11/15,11/16 Scott Harrison
 # 11/26,11/27 Gerd Kortemeyer  # 11/26,11/27 Gerd Kortemeyer
 # 12/20 Scott Harrison  # 12/20 Scott Harrison
 #  # 12/22 Gerd Kortemeyer
   # YEAR=2002
   # 01/20/02,02/05 Gerd Kortemeyer
 ###  ###
   
 # based on "Perl Cookbook" ISBN 1-56592-243-3  # based on "Perl Cookbook" ISBN 1-56592-243-3
Line 83  sub catchexception { Line 85  sub catchexception {
     die($error);      die($error);
 }  }
   
   sub timeout {
       &logthis("<font color=ref>CRITICAL: TIME OUT ".$$."</font>");
       &catchexception('Timeout');
   }
 # -------------------------------- Set signal handlers to record abnormal exits  # -------------------------------- Set signal handlers to record abnormal exits
   
 $SIG{'QUIT'}=\&catchexception;  $SIG{'QUIT'}=\&catchexception;
Line 186  sub checkchildren { Line 192  sub checkchildren {
     &initnewstatus();      &initnewstatus();
     &logstatus();      &logstatus();
     &logthis('Going to check on the children');      &logthis('Going to check on the children');
       $docdir=$perlvar{'lonDocRoot'};
     foreach (sort keys %children) {      foreach (sort keys %children) {
  sleep 1;   sleep 1;
         unless (kill 'USR1' => $_) {          unless (kill 'USR1' => $_) {
Line 193  sub checkchildren { Line 200  sub checkchildren {
             &logstatus($$.' is dead');              &logstatus($$.' is dead');
         }           } 
     }      }
       sleep 5;
       foreach (sort keys %children) {
           unless (-e "$docdir/lon-status/londchld/$_.txt") {
       &logthis('Child '.$_.' did not respond');
               kill 9 => $_;
      $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
      $subj="LON: $perlvar{'lonHostID'} killed lond process $_";
      system("echo 'Killed lond process $_.' |\
    mailto $emailto -s '$subj' > /dev/null");
       $execdir=$perlvar{'lonDaemons'};
               system("cp $execdir/logs/lond.log $execdir/logs/lond.log.".$_);
           }
       }
 }  }
   
 # --------------------------------------------------------------------- Logging  # --------------------------------------------------------------------- Logging
Line 211  sub logthis { Line 231  sub logthis {
   
 sub logstatus {  sub logstatus {
     my $docdir=$perlvar{'lonDocRoot'};      my $docdir=$perlvar{'lonDocRoot'};
       {
     my $fh=IO::File->new(">>$docdir/lon-status/londstatus.txt");      my $fh=IO::File->new(">>$docdir/lon-status/londstatus.txt");
     print $fh $$."\t".$status."\t".$lastlog."\n";      print $fh $$."\t".$status."\t".$lastlog."\n";
       $fh->close();
       }
       {
    my $fh=IO::File->new(">$docdir/lon-status/londchld/$$.txt");
           print $fh $status."\n".$lastlog."\n".time;
           $fh->close();
       }
 }  }
   
 sub initnewstatus {  sub initnewstatus {
Line 221  sub initnewstatus { Line 249  sub initnewstatus {
     my $now=time;      my $now=time;
     my $local=localtime($now);      my $local=localtime($now);
     print $fh "LOND status $local - parent $$\n\n";      print $fh "LOND status $local - parent $$\n\n";
       opendir(DIR,"$docdir/lon-status/londchld");
       while ($filename=readdir(DIR)) {
           unlink("$docdir/lon-status/londchld/$filename");
       }
       closedir(DIR);
 }  }
   
 # -------------------------------------------------------------- Status setting  # -------------------------------------------------------------- Status setting
Line 430  sub make_new_child { Line 463  sub make_new_child {
         # Child can *not* return from this subroutine.          # Child can *not* return from this subroutine.
         $SIG{INT} = 'DEFAULT';      # make SIGINT kill us as it did before          $SIG{INT} = 'DEFAULT';      # make SIGINT kill us as it did before
         $SIG{USR1}= \&logstatus;          $SIG{USR1}= \&logstatus;
           $SIG{ALRM}= \&timeout;
         $lastlog='Forked ';          $lastlog='Forked ';
         $status='Forked';          $status='Forked';
   
Line 498  sub make_new_child { Line 532  sub make_new_child {
                 chomp($userinput);                  chomp($userinput);
                 &status('Processing '.$hostid{$clientip}.': '.$userinput);                  &status('Processing '.$hostid{$clientip}.': '.$userinput);
                 my $wasenc=0;                  my $wasenc=0;
                   alarm(120);
 # ------------------------------------------------------------ See if encrypted  # ------------------------------------------------------------ See if encrypted
  if ($userinput =~ /^enc/) {   if ($userinput =~ /^enc/) {
   if ($cipher) {    if ($cipher) {
Line 676  sub make_new_child { Line 711  sub make_new_child {
                                $fpnow.='/'.$fpparts[$i];                                  $fpnow.='/'.$fpparts[$i]; 
                                unless (-e $fpnow) {                                 unless (-e $fpnow) {
    unless (mkdir($fpnow,0777)) {     unless (mkdir($fpnow,0777)) {
                                       $fperror="error:$!\n";                                        $fperror="error:$!";
                                    }                                     }
                                }                                 }
                            }                             }
Line 1089  sub make_new_child { Line 1124  sub make_new_child {
                        }                         }
 # ------------------------------------------------------------------------ dump  # ------------------------------------------------------------------------ dump
                    } elsif ($userinput =~ /^dump/) {                     } elsif ($userinput =~ /^dump/) {
                        my ($cmd,$udom,$uname,$namespace)                         my ($cmd,$udom,$uname,$namespace,$regexp)
                           =split(/:/,$userinput);                            =split(/:/,$userinput);
                        $namespace=~s/\//\_/g;                         $namespace=~s/\//\_/g;
                        $namespace=~s/\W//g;                         $namespace=~s/\W//g;
                          if (defined($regexp)) {
                             $regexp=&unescape($regexp);
          } else {
                             $regexp='.';
          }
                        my $proname=propath($udom,$uname);                         my $proname=propath($udom,$uname);
                        my $qresult='';                         my $qresult='';
       if (tie(%hash,'GDBM_File',"$proname/$namespace.db",&GDBM_READER,0640)) {        if (tie(%hash,'GDBM_File',"$proname/$namespace.db",&GDBM_READER,0640)) {
                            foreach $key (keys %hash) {                             foreach $key (keys %hash) {
                                $qresult.="$key=$hash{$key}&";                                 if (eval('$key=~/$regexp/')) {
                                     $qresult.="$key=$hash{$key}&";
          }
                            }                             }
    if (untie(%hash)) {     if (untie(%hash)) {
               $qresult=~s/\&$//;                $qresult=~s/\&$//;
Line 1327  sub make_new_child { Line 1369  sub make_new_child {
                        print $client "unknown_cmd\n";                         print $client "unknown_cmd\n";
                    }                     }
 # -------------------------------------------------------------------- complete  # -------------------------------------------------------------------- complete
      alarm(0);
                    &status('Listening to '.$hostid{$clientip});                     &status('Listening to '.$hostid{$clientip});
        }         }
 # --------------------------------------------- client unknown or fishy, refuse  # --------------------------------------------- client unknown or fishy, refuse

Removed from v.1.61  
changed lines
  Added in v.1.66


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
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.