Diff for /loncom/loncron between versions 1.75 and 1.82

version 1.75, 2007/06/12 23:50:39 version 1.82, 2009/11/26 00:18:09
Line 33  use strict; Line 33  use strict;
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
 use LONCAPA::Configuration;  use LONCAPA::Configuration;
 use Apache::lonnet;  use Apache::lonnet;
   use Apache::loncommon;
   
 use IO::File;  use IO::File;
 use IO::Socket;  use IO::Socket;
Line 304  sub start_logging { Line 305  sub start_logging {
 <li><a href="#lonsql">lonsql</a></li>  <li><a href="#lonsql">lonsql</a></li>
 <li><a href="#lond">lond</a></li>  <li><a href="#lond">lond</a></li>
 <li><a href="#lonc">lonc</a></li>  <li><a href="#lonc">lonc</a></li>
 <li><a href="#lonhttpd">lonhttpd</a></li>  
 <li><a href="#lonnet">lonnet</a></li>  <li><a href="#lonnet">lonnet</a></li>
 <li><a href="#connections">Connections</a></li>  <li><a href="#connections">Connections</a></li>
 <li><a href="#delayed">Delayed Messages</a></li>  <li><a href="#delayed">Delayed Messages</a></li>
Line 347  ENDHEADERS Line 347  ENDHEADERS
 sub clean_tmp {  sub clean_tmp {
     my ($fh)=@_;      my ($fh)=@_;
     &log($fh,'<hr /><a name="tmp" /><h2>Temporary Files</h2>');      &log($fh,'<hr /><a name="tmp" /><h2>Temporary Files</h2>');
     my $cleaned=0;      my ($cleaned,$old,$removed) = (0,0,0);
     my $old=0;      my %errors = (
     while (my $fname=<$perlvar{'lonDaemons'}/tmp/*>) {                       dir       => [],
  my ($dev,$ino,$mode,$nlink,                       file      => [],
     $uid,$gid,$rdev,$size,                       failopen  => [],
     $atime,$mtime,$ctime,                   );
     $blksize,$blocks)=stat($fname);      my %error_titles = (
  my $now=time;                           dir       => 'failed to remove empty directory:',
  my $since=$now-$mtime;                           file      => 'failed to unlike stale file',
  if ($since>$perlvar{'lonExpire'}) {                           failopen  => 'failed to open file or directory'
     my $line='';                         );
     if (open(PROBE,$fname)) {      ($cleaned,$old,$removed) = &recursive_clean_tmp('',$cleaned,$old,$removed,\%errors);
  $line=<PROBE>;      &log($fh,"Cleaned up: ".$cleaned." files; removed: $removed empty directories; (found: $old old checkout tokens)");
  close(PROBE);      foreach my $key (sort(keys(%errors))) {
     }          if (ref($errors{$key}) eq 'ARRAY') {
     unless ($line=~/^CHECKOUTTOKEN\&/) {              if (@{$errors{$key}} > 0) {
  $cleaned++;                  &log($fh,"Error during cleanup ($error_titles{$key}):<ul><li>".
  unlink("$fname");                       join('</li><li><tt>',@{$errors{$key}}).'</tt></li></ul><br />');
     } else {              }
  if ($since>365*$perlvar{'lonExpire'}) {          }
     $cleaned++;      }
     unlink("$fname");  }
  } else { $old++; }  
     }  sub recursive_clean_tmp {
  }      my ($subdir,$cleaned,$old,$removed,$errors) = @_;
       my $base = "$perlvar{'lonDaemons'}/tmp";
       my $path = $base;
       next if ($subdir =~ m{\.\./});
       next unless (ref($errors) eq 'HASH');
       unless ($subdir eq '') {
           $path .= '/'.$subdir;
       }
       if (opendir(my $dh,"$path")) {
           while (my $file = readdir($dh)) {
               next if ($file =~ /^\.\.?$/);
               my $fname = "$path/$file";
               if (-d $fname) {
                   my $innerdir;
                   if ($subdir eq '') {
                       $innerdir = $file;
                   } else {
                       $innerdir = $subdir.'/'.$file;
                   }
                   ($cleaned,$old,$removed) = 
                        &recursive_clean_tmp($innerdir,$cleaned,$old,$removed,$errors);
                   my @doms = &Apache::lonnet::current_machine_domains();
                   
                   if (open(my $dirhandle,$fname)) {
                       unless (($innerdir eq 'helprequests') ||
                               (($innerdir =~ /^addcourse/) && ($innerdir !~ m{/\d+$}))) {
                           my @contents = grep {!/^\.\.?$/} readdir($dirhandle);
                                         join('&&',@contents)."\n";    
                           if (scalar(grep {!/^\.\.?$/} readdir($dirhandle)) == 0) {
                               closedir($dirhandle);
                               if ($fname =~ m{^\Q$perlvar{'lonDaemons'}\E/tmp/}) {
                                   if (rmdir($fname)) {
                                       $removed ++;
                                   } elsif (ref($errors->{dir}) eq 'ARRAY') {
                                       push(@{$errors->{dir}},$fname);
                                   }
                               }
                           }
                       } else {
                           closedir($dirhandle);
                       }
                   }
               } else {
                   my ($dev,$ino,$mode,$nlink,
                       $uid,$gid,$rdev,$size,
                       $atime,$mtime,$ctime,
                       $blksize,$blocks)=stat($fname);
                   my $now=time;
                   my $since=$now-$mtime;
                   if ($since>$perlvar{'lonExpire'}) {
                       if ($subdir eq '') {
                           my $line='';
                           if ($fname =~ /\.db$/) {
                               if (unlink($fname)) {
                                   $cleaned++;
                               } elsif (ref($errors->{file}) eq 'ARRAY') {
                                   push(@{$errors->{file}},$fname);
                               }
                           } elsif (open(PROBE,$fname)) {
                               my $line='';
                               $line=<PROBE>;
                               close(PROBE);
                               if ($line=~/^CHECKOUTTOKEN\&/) {
                                   if ($since>365*$perlvar{'lonExpire'}) {
                                       if (unlink($fname)) {
                                           $cleaned++; 
                                       } elsif (ref($errors->{file}) eq 'ARRAY') {
                                           push(@{$errors->{file}},$fname);
                                       }
                                   } else {
                                       $old++;
                                   }
                               } else {
                                   if (unlink($fname)) {
                                       $cleaned++;
                                   } elsif (ref($errors->{file}) eq 'ARRAY') {
                                       push(@{$errors->{file}},$fname);
                                   }
                               }
                           } elsif (ref($errors->{failopen}) eq 'ARRAY') {
                               push(@{$errors->{failopen}},$fname); 
                           }
                       } else {
                           if (unlink($fname)) {
                               $cleaned++;
                           } elsif (ref($errors->{file}) eq 'ARRAY') {
                               push(@{$errors->{file}},$fname);
                           }
                       }
                   }
               }
           }
           closedir($dh);
       } elsif (ref($errors->{failopen}) eq 'ARRAY') {
           push(@{$errors->{failopen}},$path);
     }      }
     &log($fh,"Cleaned up ".$cleaned." files (".$old." old checkout tokens).");      return ($cleaned,$old,$removed);
 }  }
   
 # ------------------------------------------------------------ clean out lonIDs  # ------------------------------------------------------------ clean out lonIDs
Line 408  sub clean_sockets { Line 502  sub clean_sockets {
     opendir(SOCKETS,$perlvar{'lonSockDir'});      opendir(SOCKETS,$perlvar{'lonSockDir'});
     while (my $fname=readdir(SOCKETS)) {      while (my $fname=readdir(SOCKETS)) {
  next if (-d $fname    next if (-d $fname 
  || $fname=~/(mysqlsock|maximasock|\Q$perlvar{'lonSockDir'}\E)/);   || $fname=~/(mysqlsock|maximasock|rsock|\Q$perlvar{'lonSockDir'}\E)/);
  $cleaned++;   $cleaned++;
  &log($fh,"Unlinking $fname<br />");   &log($fh,"Unlinking $fname<br />");
  unlink("/home/httpd/sockets/$fname");   unlink("/home/httpd/sockets/$fname");
Line 588  sub log_simplestatus { Line 682  sub log_simplestatus {
   
 sub send_mail {  sub send_mail {
     print "sending mail\n";      print "sending mail\n";
     my $emailto="$perlvar{'lonAdmEMail'}";      my $defdom = $perlvar{'lonDefDomain'};
       my $origmail = $perlvar{'lonAdmEMail'};
       my $emailto = &Apache::loncommon::build_recipient_list(undef,
                                      'lonstatusmail',$defdom,$origmail);
     if ($totalcount>2500) {      if ($totalcount>2500) {
  $emailto.=",$perlvar{'lonSysEMail'}";   $emailto.=",$perlvar{'lonSysEMail'}";
     }      }
Line 671  sub main () { Line 768  sub main () {
     &Apache::lonnet::load_domain_tab(1);      &Apache::lonnet::load_domain_tab(1);
     &Apache::lonnet::get_iphost(1);      &Apache::lonnet::get_iphost(1);
   
   # ----------------------------------------- Force firewall update for lond port  
   
       if ((!$justcheckdaemons) && (!$justreload)) {
           my $now = time;
           my $tmpfile = $perlvar{'lonDaemons'}.'/tmp/lciptables_iphost_'.
                         $now.$$.int(rand(10000));
           if (open(my $fh,">$tmpfile")) {
               my %iphosts = &Apache::lonnet::get_iphost();
               foreach my $key (keys(%iphosts)) {
                   print $fh "$key\n";
               }
               close($fh);
               my $execpath = $perlvar{'lonDaemons'}.'/lciptables';
               system("$execpath $tmpfile");
               unlink($fh);
           }
       }
   
 # ---------------------------------------------------------------- Start report  # ---------------------------------------------------------------- Start report
   
     $errors=0;      $errors=0;
Line 690  sub main () { Line 805  sub main () {
  &rotate_other_logs($fh);   &rotate_other_logs($fh);
     }      }
     if (!$justcheckconnections && !$justreload) {      if (!$justcheckconnections && !$justreload) {
    &checkon_daemon($fh,'lonmemcached',40000);
  &checkon_daemon($fh,'lonsql',200000);   &checkon_daemon($fh,'lonsql',200000);
  if ( &checkon_daemon($fh,'lond',40000,'USR1') eq 'running') {   if ( &checkon_daemon($fh,'lond',40000,'USR1') eq 'running') {
     &checkon_daemon($fh,'lond',40000,'USR2');      &checkon_daemon($fh,'lond',40000,'USR2');
  }   }
  &checkon_daemon($fh,'lonc',40000,'USR1');   &checkon_daemon($fh,'lonc',40000,'USR1');
  &checkon_daemon($fh,'lonhttpd',40000);  
  &checkon_daemon($fh,'lonmemcached',40000);  
         &checkon_daemon($fh,'lonmaxima',40000);          &checkon_daemon($fh,'lonmaxima',40000);
           &checkon_daemon($fh,'lonr',40000);
     }      }
     if ($justreload) {      if ($justreload) {
  &checkon_daemon($fh,'lond',40000,'USR2');   &checkon_daemon($fh,'lond',40000,'USR2');

Removed from v.1.75  
changed lines
  Added in v.1.82


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