--- loncom/loncron 2019/03/17 23:23:21 1.117
+++ loncom/loncron 2020/05/09 19:17:33 1.124
@@ -2,7 +2,7 @@
# Housekeeping program, started by cron, loncontrol and loncron.pl
#
-# $Id: loncron,v 1.117 2019/03/17 23:23:21 raeburn Exp $
+# $Id: loncron,v 1.124 2020/05/09 19:17:33 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -46,6 +46,8 @@ use GDBM_File;
use Storable qw(thaw);
use File::ReadBackwards;
use File::Copy;
+use Sys::Hostname::FQDN();
+
#globals
use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount);
@@ -495,19 +497,38 @@ 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)
");
@@ -521,7 +542,7 @@ sub clean_balanceIDs {
my $cleaned=0;
my $active=0;
if (-d $perlvar{'lonBalanceDir'}) {
- while (my $fname=<$perlvar{'balanceDir'}/*.id>) {
+ while (my $fname=<$perlvar{'lonBalanceDir'}/*.id>) {
my ($dev,$ino,$mode,$nlink,
$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,
@@ -567,6 +588,34 @@ sub clean_webDAV_sessionIDs {
}
}
+# ------------------------------------------------------------ clean out ltiIDs
+
+sub clean_ltiIDs {
+ my ($fh)=@_;
+ &log($fh,'
LTI Session Pointers
');
+ my $cleaned=0;
+ my $active=0;
+ if (-d $perlvar{'ltiIDsDir'}) {
+ while (my $fname=<$perlvar{'ltiIDsDir'}/*>) {
+ 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." old LTI session pointers.
");
+ &log($fh,"$active unexpired LTI session pointers
");
+}
+
# ----------------------------------------------------------- clean out sockets
sub clean_sockets {
my ($fh)=@_;
@@ -1068,7 +1117,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)) {
@@ -1081,10 +1130,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);
@@ -1099,10 +1148,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")) {
@@ -1486,19 +1535,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
@@ -1513,9 +1566,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");
@@ -1548,9 +1602,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
@@ -1581,7 +1637,7 @@ sub main () {
my $fh;
- if (!$justcheckdaemons && !$justcheckconnections && !$justreload) {
+ if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) {
$fh=&start_logging();
&log_machine_info($fh);
@@ -1589,11 +1645,12 @@ sub main () {
&clean_lonIDs($fh);
&clean_balanceIDs($fh);
&clean_webDAV_sessionIDs($fh);
+ &clean_ltiIDs($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') {
@@ -1614,7 +1671,7 @@ sub main () {
if ($justcheckconnections) {
&test_connections($fh);
}
- if (!$justcheckdaemons && !$justcheckconnections && !$justreload) {
+ if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) {
my $domconf = &get_domain_config();
my ($threshold,$sysmail,$reportstatus,$weightsref,$exclusionsref) =
&get_permcount_settings($domconf);