--- loncom/loncron 2019/07/07 15:47:40 1.103.2.3 +++ loncom/loncron 2020/05/09 19:24:25 1.103.2.8 @@ -2,7 +2,7 @@ # Housekeeping program, started by cron, loncontrol and loncron.pl # -# $Id: loncron,v 1.103.2.3 2019/07/07 15:47:40 raeburn Exp $ +# $Id: loncron,v 1.103.2.8 2020/05/09 19:24:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,6 +42,8 @@ use IO::Socket; use HTML::Entities; use Getopt::Long; use File::Copy; +use Sys::Hostname::FQDN(); + #globals use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount); @@ -488,24 +490,71 @@ sub clean_lonIDs { my $cleaned=0; my $active=0; while (my $fname=<$perlvar{'lonIDsDir'}/*>) { - 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'}) { - $cleaned++; - &log($fh,"Unlinking $fname
"); - unlink("$fname"); - } else { - $active++; - } + my $now=time; + if (-l $fname) { + my $linkfname = readlink($fname); + if (-f $linkfname) { + if ($linkfname =~ m{^$perlvar{'lonIDsDir'}/[^/]+\.id$}) { + my @data = stat($linkfname); + my $mtime = $data[9]; + my $since=$now-$mtime; + if ($since>$perlvar{'lonExpire'}) { + if (unlink($linkfname)) { + $cleaned++; + &log($fh,"Unlinking $linkfname
"); + unlink($fname); + } + } + } + } else { + unlink($fname); + } + } elsif (-f $fname) { + my @data = stat($fname); + my $mtime = $data[9]; + my $since=$now-$mtime; + if ($since>$perlvar{'lonExpire'}) { + if (unlink($fname)) { + $cleaned++; + &log($fh,"Unlinking $fname
"); + } + } else { + $active++; + } + } } &log($fh,"

Cleaned up ".$cleaned." stale session token(s).

"); &log($fh,"

$active open session(s)

"); } +# -------------------------------------------------------- clean out balanceIDs + +sub clean_balanceIDs { + my ($fh)=@_; + &log($fh,'

Session Tokens

'); + my $cleaned=0; + my $active=0; + if (-d $perlvar{'lonBalanceDir'}) { + while (my $fname=<$perlvar{'lonBalanceDir'}/*.id>) { + 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'}) { + $cleaned++; + &log($fh,"Unlinking $fname
"); + unlink("$fname"); + } else { + $active++; + } + } + } + &log($fh,"

Cleaned up ".$cleaned." stale balancer files

"); + &log($fh,"

$active unexpired balancer files

"); +} + # ------------------------------------------------ clean out webDAV Session IDs sub clean_webDAV_sessionIDs { my ($fh)=@_; @@ -865,7 +914,7 @@ sub write_hostips { if (keys(%prevhosts) && keys(%currhosts)) { foreach my $key (keys(%prevhosts)) { unless ($currhosts{$key} eq $prevhosts{$key}) { - $ipchange{$key} = $prevhosts{$key}.'|'.$currhosts{$key}; + $ipchange{$key} = $prevhosts{$key}.' | '.$currhosts{$key}; } } foreach my $key (keys(%currhosts)) { @@ -878,10 +927,10 @@ sub write_hostips { if (keys(%ipchange)) { if (open(my $fh,'>>',$perlvar{'lonDaemons'}.'/logs/hostip.log')) { print $fh "********************\n".localtime(time).' Changes --'."\n". - "Hostname | Previous IP | New IP\n". - "--------------------------------\n"; + "| Hostname | Previous IP | New IP |\n". + " --------------------------------- \n"; foreach my $hostname (sort(keys(%ipchange))) { - print $fh "$hostname | $ipchange{$hostname}\n"; + print $fh "| $hostname | $ipchange{$hostname} |\n"; } print $fh "\n*******************\n\n"; close($fh); @@ -896,10 +945,10 @@ sub write_hostips { "MIME-Version: 1.0\n\n". "Host/IP changes\n". " \n". - "Hostname | Previous IP | New IP\n". - "--------------------------------\n"; + "| Hostname | Previous IP | New IP |\n". + " --------------------------------- \n"; foreach my $hostname (sort(keys(%ipchange))) { - $chgmail .= "$hostname | $ipchange{$hostname}\n"; + $chgmail .= "| $hostname | $ipchange{$hostname} |\n"; } $chgmail .= "\n\n"; if (open(my $mailh, "|/usr/lib/sendmail -oi -t -odb")) { @@ -971,19 +1020,23 @@ Options: do not send emails do not check if the daemons are running, do not generate lon-status - + --justiptables Only update the dynamic iptables rules for the + lond port; do not send emails, do not + check if the daemons are running, do not + generate lon-status USAGE } # ================================================================ Main Program sub main () { my ($help,$justcheckdaemons,$noemail,$justcheckconnections, - $justreload); + $justreload,$justiptables); &GetOptions("help" => \$help, "justcheckdaemons" => \$justcheckdaemons, "noemail" => \$noemail, "justcheckconnections" => \$justcheckconnections, - "justreload" => \$justreload + "justreload" => \$justreload, + "justiptables" => \$justiptables ); if ($help) { &usage(); return; } # --------------------------------- Read loncapa_apache.conf and loncapa.conf @@ -998,9 +1051,10 @@ sub main () { if ('{[[[[lonHostID]]]]}' eq $perlvar{'lonHostID'}) { print("Unconfigured machine.\n"); my $emailto=$perlvar{'lonSysEMail'}; - my $hostname=`/bin/hostname`; - chop $hostname; - $hostname=~s/[^\w\.]//g; # make sure is safe to pass through shell + my $hostname = Sys::Hostname::FQDN::fqdn(); + $hostname=~s/\.+/./g; + $hostname=~s/\-+/-/g; + $hostname=~s/[^\w\.-]//g; # make sure is safe to pass through shell my $subj="LON: Unconfigured machine $hostname"; system("echo 'Unconfigured machine $hostname.' |". " mail -s '$subj' $emailto > /dev/null"); @@ -1033,9 +1087,11 @@ sub main () { } } } - &Apache::lonnet::load_hosts_tab(1,$nomemcache); - &Apache::lonnet::load_domain_tab(1,$nomemcache); - &Apache::lonnet::get_iphost(1,$nomemcache); + if (!$justiptables) { + &Apache::lonnet::load_hosts_tab(1,$nomemcache); + &Apache::lonnet::load_domain_tab(1,$nomemcache); + &Apache::lonnet::get_iphost(1,$nomemcache); + } # ----------------------------------------- Force firewall update for lond port @@ -1066,18 +1122,19 @@ sub main () { my $fh; - if (!$justcheckdaemons && !$justcheckconnections && !$justreload) { + if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) { $fh=&start_logging(); &log_machine_info($fh); &clean_tmp($fh); &clean_lonIDs($fh); + &clean_balanceIDs($fh); &clean_webDAV_sessionIDs($fh); &check_httpd_logs($fh); &rotate_lonnet_logs($fh); &rotate_other_logs($fh); } - if (!$justcheckconnections && !$justreload) { + if (!$justcheckconnections && !$justreload && !$justiptables) { &checkon_daemon($fh,'lonmemcached',40000); &checkon_daemon($fh,'lonsql',200000); if ( &checkon_daemon($fh,'lond',40000,'USR1') eq 'running') { @@ -1094,7 +1151,7 @@ sub main () { if ($justcheckconnections) { &test_connections($fh); } - if (!$justcheckdaemons && !$justcheckconnections && !$justreload) { + if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) { &check_delayed_msg($fh); &finish_logging($fh); &log_simplestatus();