4.7 Apache Restarts Twice
When the server is restarted, the
configuration and module initialization phases are called twice
before the children are forked. The second restart is done to test
that all modules can survive a restart (SIGHUP),
in order to ensure that future graceful restarts will work correctly.
This is very important if you are going to restart a production
server.
You can control what Perl code will be executed on the start or
restart by checking the values of
$Apache::Server::Starting and
$Apache::Server::ReStarting. The former variable
is true when the server is starting, and the latter is true when
it's restarting.
For example, if you want to be notified when the server starts or
restarts, you can do:
<Perl>
email_notify("start") if $Apache::Server::Starting;
email_notify("restart") if $Apache::Server::ReStarting;
</Perl>
where the function email_notify( ) (that you have
to write) performs the notification. Since Apache restarts itself on
start, you will get both notifications when Apache is started, and
only one when it's restarted.
The startup.pl file and similar files loaded via
PerlModule or PerlRequire are
compiled only once, because once the module is compiled, it enters
the special %INC hash. When Apache restarts, Perl
checks whether the module or script in question is already registered
in %INC and won't try to compile
it again.
Thus, the only code that you might need to protect from running on
restart is the code in <Perl> sections. But
since <Perl> sections are primarily used for
creating on-the-fly configurations, it shouldn't be
a problem to run the code more than once.
|