version 1.10, 2000/12/05 19:03:55
|
version 1.11, 2000/12/06 18:05:51
|
Line 35 sub catchexception {
|
Line 35 sub catchexception {
|
$SIG{__DIE__}='DEFAULT'; |
$SIG{__DIE__}='DEFAULT'; |
&logthis("<font color=red>CRITICAL: " |
&logthis("<font color=red>CRITICAL: " |
."ABNORMAL EXIT. Child $$ for server $wasserver died through " |
."ABNORMAL EXIT. Child $$ for server $wasserver died through " |
."$signal with this parameter->[$@]</font>"); |
."\"$signal\" with this parameter->[$@]</font>"); |
die($@); |
die($@); |
} |
} |
|
|
# grabs exception and records it to log before exiting |
|
# NOTE: we must NOT use the regular (non-overrided) die function in |
|
# the code because a handler CANNOT be attached to it |
|
# (despite what some of the documentation says about SIG{__DIE__}. |
|
sub catchdie { |
|
my ($message)=@_; |
|
$SIG{'QUIT'}='DEFAULT'; |
|
$SIG{__DIE__}='DEFAULT'; |
|
&logthis("<font color=red>CRITICAL: " |
|
."ABNORMAL EXIT. Child $$ for server $wasserver died through " |
|
."\_\_DIE\_\_ with this parameter->[$message]</font>"); |
|
die($message); |
|
} |
|
|
|
$childmaxattempts=10; |
$childmaxattempts=10; |
|
|
# -------------------------------- Set signal handlers to record abnormal exits |
# -------------------------------- Set signal handlers to record abnormal exits |
Line 62 $SIG{__DIE__}=\&catchexception;
|
Line 48 $SIG{__DIE__}=\&catchexception;
|
|
|
# ------------------------------------ Read httpd access.conf and get variables |
# ------------------------------------ Read httpd access.conf and get variables |
|
|
open (CONFIG,"/etc/httpd/conf/access.conf") |
open (CONFIG,"/etc/httpd/conf/access.conf") || die "Can't read access.conf"; |
|| catchdie "Can't read access.conf"; |
|
|
|
while ($configline=<CONFIG>) { |
while ($configline=<CONFIG>) { |
if ($configline =~ /PerlSetVar/) { |
if ($configline =~ /PerlSetVar/) { |
Line 82 if (-e $pidfile) {
|
Line 67 if (-e $pidfile) {
|
my $lfh=IO::File->new("$pidfile"); |
my $lfh=IO::File->new("$pidfile"); |
my $pide=<$lfh>; |
my $pide=<$lfh>; |
chomp($pide); |
chomp($pide); |
if (kill 0 => $pide) { catchdie "already running"; } |
if (kill 0 => $pide) { die "already running"; } |
} |
} |
|
|
# ------------------------------------------------------------- Read hosts file |
# ------------------------------------------------------------- Read hosts file |
|
|
open (CONFIG,"$perlvar{'lonTabDir'}/hosts.tab") |
open (CONFIG,"$perlvar{'lonTabDir'}/hosts.tab") || die "Can't read host file"; |
|| catchdie "Can't read host file"; |
|
|
|
while ($configline=<CONFIG>) { |
while ($configline=<CONFIG>) { |
my ($id,$domain,$role,$name,$ip)=split(/:/,$configline); |
my ($id,$domain,$role,$name,$ip)=split(/:/,$configline); |
Line 189 sub logperm {
|
Line 173 sub logperm {
|
|
|
$fpid=fork; |
$fpid=fork; |
exit if $fpid; |
exit if $fpid; |
catchdie "Couldn't fork: $!" unless defined ($fpid); |
die "Couldn't fork: $!" unless defined ($fpid); |
|
|
POSIX::setsid() or catchdie "Can't start new session: $!"; |
POSIX::setsid() or die "Can't start new session: $!"; |
|
|
# ------------------------------------------------------- Write our PID on disk |
# ------------------------------------------------------- Write our PID on disk |
|
|
Line 246 sub make_new_child {
|
Line 230 sub make_new_child {
|
# block signal for fork |
# block signal for fork |
$sigset = POSIX::SigSet->new(SIGINT); |
$sigset = POSIX::SigSet->new(SIGINT); |
sigprocmask(SIG_BLOCK, $sigset) |
sigprocmask(SIG_BLOCK, $sigset) |
or catchdie "Can't block SIGINT for fork: $!\n"; |
or die "Can't block SIGINT for fork: $!\n"; |
|
|
catchdie "fork: $!" unless defined ($pid = fork); |
die "fork: $!" unless defined ($pid = fork); |
|
|
if ($pid) { |
if ($pid) { |
# Parent records the child's birth and returns. |
# Parent records the child's birth and returns. |
sigprocmask(SIG_UNBLOCK, $sigset) |
sigprocmask(SIG_UNBLOCK, $sigset) |
or catchdie "Can't unblock SIGINT for fork: $!\n"; |
or die "Can't unblock SIGINT for fork: $!\n"; |
$children{$pid} = $conserver; |
$children{$pid} = $conserver; |
$childpid{$conserver} = $pid; |
$childpid{$conserver} = $pid; |
return; |
return; |
Line 263 sub make_new_child {
|
Line 247 sub make_new_child {
|
|
|
# unblock signals |
# unblock signals |
sigprocmask(SIG_UNBLOCK, $sigset) |
sigprocmask(SIG_UNBLOCK, $sigset) |
or catchdie "Can't unblock SIGINT for fork: $!\n"; |
or die "Can't unblock SIGINT for fork: $!\n"; |
|
|
# ----------------------------- This is the modified main program of non-forker |
# ----------------------------- This is the modified main program of non-forker |
|
|
Line 530 sub nonblock {
|
Line 514 sub nonblock {
|
|
|
|
|
$flags = fcntl($socket, F_GETFL, 0) |
$flags = fcntl($socket, F_GETFL, 0) |
or catchdie "Can't get flags for socket: $!\n"; |
or die "Can't get flags for socket: $!\n"; |
fcntl($socket, F_SETFL, $flags | O_NONBLOCK) |
fcntl($socket, F_SETFL, $flags | O_NONBLOCK) |
or catchdie "Can't make socket nonblocking: $!\n"; |
or die "Can't make socket nonblocking: $!\n"; |
} |
} |
|
|