version 1.4, 1999/12/22 17:18:04
|
version 1.5, 2000/02/08 17:34:24
|
Line 11
|
Line 11
|
# USR1 tries to open connections again |
# USR1 tries to open connections again |
|
|
# 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 Gerd Kortemeyer |
# 10/8,10/9,10/15,11/18,12/22, |
|
# 2/8 Gerd Kortemeyer |
# based on nonforker from Perl Cookbook |
# based on nonforker from Perl Cookbook |
# - server who multiplexes without forking |
# - server who multiplexes without forking |
|
|
Line 24 use Fcntl;
|
Line 25 use Fcntl;
|
use Tie::RefHash; |
use Tie::RefHash; |
use Crypt::IDEA; |
use Crypt::IDEA; |
|
|
|
$childmaxattempts=10; |
|
|
# ------------------------------------ Read httpd access.conf and get variables |
# ------------------------------------ Read httpd access.conf and get variables |
|
|
open (CONFIG,"/etc/httpd/conf/access.conf") || die "Can't read access.conf"; |
open (CONFIG,"/etc/httpd/conf/access.conf") || die "Can't read access.conf"; |
Line 61 sub REAPER { # ta
|
Line 64 sub REAPER { # ta
|
$SIG{CHLD} = \&REAPER; |
$SIG{CHLD} = \&REAPER; |
my $pid = wait; |
my $pid = wait; |
my $wasserver=$children{$pid}; |
my $wasserver=$children{$pid}; |
&logthis("Child $pid for server $wasserver died"); |
&logthis( |
|
"<font color=red>CRITICAL: Child $pid for server $wasserver died</font>"); |
delete $children{$pid}; |
delete $children{$pid}; |
delete $childpid{$wasserver}; |
delete $childpid{$wasserver}; |
my $port = "$perlvar{'lonSockDir'}/$wasserver"; |
my $port = "$perlvar{'lonSockDir'}/$wasserver"; |
Line 73 sub HUNTSMAN { # si
|
Line 77 sub HUNTSMAN { # si
|
kill 'INT' => keys %children; |
kill 'INT' => keys %children; |
my $execdir=$perlvar{'lonDaemons'}; |
my $execdir=$perlvar{'lonDaemons'}; |
unlink("$execdir/logs/lonc.pid"); |
unlink("$execdir/logs/lonc.pid"); |
&logthis("Shutting down"); |
&logthis("<font color=red>CRITICAL: Shutting down</font>"); |
exit; # clean up with dignity |
exit; # clean up with dignity |
} |
} |
|
|
sub HUPSMAN { # signal handler for SIGHUP |
sub HUPSMAN { # signal handler for SIGHUP |
local($SIG{CHLD}) = 'IGNORE'; # we're going to kill our children |
local($SIG{CHLD}) = 'IGNORE'; # we're going to kill our children |
kill 'INT' => keys %children; |
kill 'INT' => keys %children; |
&logthis("Restarting"); |
&logthis("<font color=red>CRITICAL: Restarting</font>"); |
my $execdir=$perlvar{'lonDaemons'}; |
my $execdir=$perlvar{'lonDaemons'}; |
exec("$execdir/lonc"); # here we go again |
exec("$execdir/lonc"); # here we go again |
} |
} |
Line 98 sub USRMAN {
|
Line 102 sub USRMAN {
|
# -------------------------------------------------- Non-critical communication |
# -------------------------------------------------- Non-critical communication |
sub subreply { |
sub subreply { |
my ($cmd,$server)=@_; |
my ($cmd,$server)=@_; |
|
my $answer=''; |
if ($server ne $perlvar{'lonHostID'}) { |
if ($server ne $perlvar{'lonHostID'}) { |
my $peerfile="$perlvar{'lonSockDir'}/$server"; |
my $peerfile="$perlvar{'lonSockDir'}/$server"; |
my $sclient=IO::Socket::UNIX->new(Peer =>"$peerfile", |
my $sclient=IO::Socket::UNIX->new(Peer =>"$peerfile", |
Line 147 $execdir=$perlvar{'lonDaemons'};
|
Line 152 $execdir=$perlvar{'lonDaemons'};
|
open (PIDSAVE,">$execdir/logs/lonc.pid"); |
open (PIDSAVE,">$execdir/logs/lonc.pid"); |
print PIDSAVE "$$\n"; |
print PIDSAVE "$$\n"; |
close(PIDSAVE); |
close(PIDSAVE); |
&logthis("---------- Starting ----------"); |
&logthis("<font color=red>CRITICAL: ---------- Starting ----------</font>"); |
|
|
# ----------------------------- Ignore signals generated during initial startup |
# ----------------------------- Ignore signals generated during initial startup |
$SIG{HUP}=$SIG{USR1}='IGNORE'; |
$SIG{HUP}=$SIG{USR1}='IGNORE'; |
Line 173 while (1) {
|
Line 178 while (1) {
|
# See who died and start new one |
# See who died and start new one |
foreach $thisserver (keys %hostip) { |
foreach $thisserver (keys %hostip) { |
if (!$childpid{$thisserver}) { |
if (!$childpid{$thisserver}) { |
if ($childatt{$thisserver}<5) { |
if ($childatt{$thisserver}<=$childmaxattempt) { |
|
my $ainfoatt=1*$childatt{$thisserver}; |
|
&logthis( |
|
"<font color=yellow>INFO: Trying to reconnect for $thisserver " |
|
."($ainfoatt of $childmaxattempts attempts)</font>"); |
make_new_child($thisserver); |
make_new_child($thisserver); |
$childatt{$thisserver}++; |
$childatt{$thisserver}++; |
} |
} |
Line 221 unless (
|
Line 230 unless (
|
PeerPort => $perlvar{'londPort'}, |
PeerPort => $perlvar{'londPort'}, |
Proto => "tcp", |
Proto => "tcp", |
Type => SOCK_STREAM) |
Type => SOCK_STREAM) |
) { &logthis("Couldn't connect $conserver: $@"); |
) { |
sleep(5); |
my $st=120+int(rand(240)); |
|
&logthis( |
|
"<font color=blue>WARNING: Couldn't connect $conserver ($st secs): $@</font>"); |
|
sleep($st); |
exit; |
exit; |
}; |
}; |
# --------------------------------------- Send a ping to make other end do USR1 |
# --------------------------------------- Send a ping to make other end do USR1 |
Line 251 my $cipherkey=pack("H32",$key);
|
Line 263 my $cipherkey=pack("H32",$key);
|
if ($cipher=new IDEA $cipherkey) { |
if ($cipher=new IDEA $cipherkey) { |
&logthis("Secure connection inititalized: $conserver"); |
&logthis("Secure connection inititalized: $conserver"); |
} else { |
} else { |
&logthis("Error: Could not establish secure connection, $conserver!"); |
my $st=120+int(rand(240)); |
|
&logthis( |
|
"<font color=blue>WARNING: ". |
|
"Could not establish secure connection, $conserver ($st secs)!</font>"); |
|
sleep($st); |
|
exit; |
} |
} |
|
|
# ----------------------------------------- We're online, send delayed messages |
# ----------------------------------------- We're online, send delayed messages |
Line 301 unless (
|
Line 318 unless (
|
$server = IO::Socket::UNIX->new(Local => $port, |
$server = IO::Socket::UNIX->new(Local => $port, |
Type => SOCK_STREAM, |
Type => SOCK_STREAM, |
Listen => 10 ) |
Listen => 10 ) |
) { &logthis("Can't make server socket $conserver: $@"); |
) { |
sleep(5); |
my $st=120+int(rand(240)); |
|
&logthis( |
|
"<font color=blue>WARNING: ". |
|
"Can't make server socket $conserver ($st secs): $@</font>"); |
|
sleep($st); |
exit; |
exit; |
}; |
}; |
|
|
# ----------------------------------------------------------------------------- |
# ----------------------------------------------------------------------------- |
|
|
|
&logthis("<font color=green>$conserver online</font>"); |
|
|
|
# ----------------------------------------------------------------------------- |
# begin with empty buffers |
# begin with empty buffers |
%inbuffer = (); |
%inbuffer = (); |
%outbuffer = (); |
%outbuffer = (); |