version 1.37, 2002/04/04 21:55:55
|
version 1.45, 2003/02/03 18:03:52
|
Line 37
|
Line 37
|
# 6/4/99,6/5,6/7,6/8,6/9,6/10,6/11,6/12,7/14,7/19, |
# 6/4/99,6/5,6/7,6/8,6/9,6/10,6/11,6/12,7/14,7/19, |
# 10/8,10/9,10/15,11/18,12/22, |
# 10/8,10/9,10/15,11/18,12/22, |
# 2/8,7/25 Gerd Kortemeyer |
# 2/8,7/25 Gerd Kortemeyer |
# 12/05 Scott Harrison |
|
# 12/05 Gerd Kortemeyer |
# 12/05 Gerd Kortemeyer |
# YEAR=2001 |
# YEAR=2001 |
# 01/10/01 Scott Harrison |
|
# 03/14/01,03/15,06/12,11/26,11/27,11/28 Gerd Kortemeyer |
# 03/14/01,03/15,06/12,11/26,11/27,11/28 Gerd Kortemeyer |
# 12/20 Scott Harrison |
|
# YEAR=2002 |
# YEAR=2002 |
# 2/19/02,02/22/02,02/25/02 Gerd Kortemeyer |
# 2/19/02,02/22/02,02/25/02 Gerd Kortemeyer |
# 3/07/02 Ron Fox |
# 3/07/02 Ron Fox |
# based on nonforker from Perl Cookbook |
# based on nonforker from Perl Cookbook |
# - server who multiplexes without forking |
# - server who multiplexes without forking |
|
|
|
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA::Configuration; |
|
|
use POSIX; |
use POSIX; |
use IO::Socket; |
use IO::Socket; |
use IO::Select; |
use IO::Select; |
Line 71 $DEBUG = 0; # Set to 1 for annoyingly
|
Line 71 $DEBUG = 0; # Set to 1 for annoyingly
|
$SIG{QUIT}=\&catchexception; |
$SIG{QUIT}=\&catchexception; |
$SIG{__DIE__}=\&catchexception; |
$SIG{__DIE__}=\&catchexception; |
|
|
# ------------------------------------ Read httpd access.conf and get variables |
# ---------------------------------- Read loncapa_apache.conf and loncapa.conf |
&status("Read access.conf"); |
&status("Read loncapa.conf and loncapa_apache.conf"); |
open (CONFIG,"/etc/httpd/conf/access.conf") || die "Can't read access.conf"; |
my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf'); |
|
my %perlvar=%{$perlvarref}; |
while ($configline=<CONFIG>) { |
undef $perlvarref; |
if ($configline =~ /PerlSetVar/) { |
|
my ($dummy,$varname,$varvalue)=split(/\s+/,$configline); |
|
chomp($varvalue); |
|
$perlvar{$varname}=$varvalue; |
|
} |
|
} |
|
close(CONFIG); |
|
|
|
# ----------------------------- Make sure this process is running from user=www |
# ----------------------------- Make sure this process is running from user=www |
&status("Check user ID"); |
&status("Check user ID"); |
Line 175 $SIG{USR1} = \&USRMAN;
|
Line 168 $SIG{USR1} = \&USRMAN;
|
# And maintain the population. |
# And maintain the population. |
while (1) { |
while (1) { |
my $deadpid = wait; # Wait for the next child to die. |
my $deadpid = wait; # Wait for the next child to die. |
# See who died and start new one |
# See who died and start new one |
|
# or a signal (e.g. USR1 for restart). |
|
# if a signal, the wait will fail |
|
# This is ordinarily detected by |
|
# checking for the existence of the |
|
# pid index inthe children hash since |
|
# the return value from a failed wait is -1 |
|
# which is an impossible PID. |
&status("Woke up"); |
&status("Woke up"); |
my $skipping=''; |
my $skipping=''; |
|
|
Line 255 unlink($port);
|
Line 255 unlink($port);
|
@allbuffered=grep /\.$conserver$/, readdir DIRHANDLE; |
@allbuffered=grep /\.$conserver$/, readdir DIRHANDLE; |
closedir(DIRHANDLE); |
closedir(DIRHANDLE); |
my $dfname; |
my $dfname; |
foreach (@allbuffered) { |
foreach (sort @allbuffered) { |
&status("Sending delayed: $_"); |
&status("Sending delayed: $_"); |
$dfname="$path/$_"; |
$dfname="$path/$_"; |
if($DEBUG) { &logthis('Sending '.$dfname); } |
if($DEBUG) { &logthis('Sending '.$dfname); } |
Line 512 sub HandleInput
|
Line 512 sub HandleInput
|
my $ready = shift; |
my $ready = shift; |
my $sock; |
my $sock; |
|
|
&logthis("Entered HandleInput\n"); |
if($DEBUG) { |
|
&logthis("Entered HandleInput\n"); |
|
} |
foreach $sock (keys %$sockets) { |
foreach $sock (keys %$sockets) { |
my $socket = $sockets->{$sock}; |
my $socket = $sockets->{$sock}; |
if(vec($selvec, $sock, 1)) { # Socket which is readable. |
if(vec($selvec, $sock, 1)) { # Socket which is readable. |
Line 868 sub checkchildren {
|
Line 870 sub checkchildren {
|
|
|
sub USRMAN { |
sub USRMAN { |
&logthis("USR1: Trying to establish connections again"); |
&logthis("USR1: Trying to establish connections again"); |
%childatt=(); |
# |
&checkchildren(); |
# It is really important not to just clear the childatt hash or we will |
|
# lose all memory of the children. What we really want to do is this: |
|
# For each index where childatt is >= $childmaxattempts |
|
# Zero the associated counter and do a make_child for the host. |
|
# Regardles, the childatt entry is zeroed: |
|
my $host; |
|
foreach $host (keys %childatt) { |
|
if ($childatt{$host} >= $childmaxattempts) { |
|
$childatt{$host} = 0; |
|
&logthis("<font color=green>INFO: Restarting child for server: " |
|
.$host."</font>\n"); |
|
make_new_child($host); |
|
} |
|
else { |
|
$childatt{$host} = 0; |
|
} |
|
} |
|
&checkchildren(); # See if any children are still dead... |
} |
} |
|
|
# -------------------------------------------------- Non-critical communication |
# -------------------------------------------------- Non-critical communication |
Line 1014 sub status {
|
Line 1033 sub status {
|
my $now=time; |
my $now=time; |
my $local=localtime($now); |
my $local=localtime($now); |
$status=$local.': '.$what; |
$status=$local.': '.$what; |
|
$0='lonc: '.$what.' '.$local; |
} |
} |
|
|
|
|