I remember of having come across similar situation in
BLFS-SVN-20061015. But,
unfortunately, what I don't remember is whether it was
apache or something
else !! I were too busy to make a not of that.
A start up script I tried to execute manually while in
single user mode, went
into an infinite loop and since I were in a hurry, I just
had to shut the
system down !!
I have been wanting to say about the start up scripts in
BLFS. BLFS scripts
simply check for the pid file of the process in question and
if the pid file
doesn't exist, the script does nothing !! A better way would
be (this idea is
stolen from SuSE scripts !! ) to check
for the pid of running process and
to confirm it by presence of pid under the /proc tree and
then take the
necessary actions.
Sometimes, it just happens that, the daemon crashes and the
pid file remains.
Now if you try to restart the process by executing start-up
script, it won't
work as, the start up script would exit with the message
"pid file
exists....." ! In such case, the start-up script should
check for the running
instance of the process and if it doesn't exist, should
remove the pid file
and start the process again.
Similarly, I have come across situations where a pid file is
not created, not
because the script didn't try to create it but because of
some other reasons.
Now the script would check for the presence of pid and
believe that the
process isn't running !!
I have kerberos installed and when the start-up script for
kerberos starts at
boot time, it simply hangs there and never returns !! A
close examination
revealed that, when the start-up script tries to start the
process krb5kdc by
passing the pidfile and executable as arguments to the
funxtion loadproc
defined in /etc/rc.d/init.d/functions, the loadproc
functions tries to
execute it as usual. But it never returns, as the process
krb5kdc doesn't
background itself automatically and hence runs in the
foreground !! For this
to work, I changed the loadproc functions to execute
processes in the
background explicitly by appending an "&" to
the line that actually lauches
the process.
For some reason, pid file for krb5kdc never gets created ! I
haven't been able
to understand why ! So, whenever I do a reboot or shutdown,
krb5kdc never
gets killed because the pid file doesn't exist !!
The aforementioned behaviour by start-up scripts is true for
some while some
are coded to check the running instance of the process and
take the
appropriate action.
I have modified some of the scripts to take care of such
circumstances yet, I
believe it is possible to code it better !
Let me know if I could be some assistance in this regard.
Thanks.
Kevin
On Saturday 02 December 2006 13:21, Paul G Rogers wrote:
> I found a race condition in LFS-4.1 function
killproc(), but the same
> code is found in the LFS-6.1.1 I recently installed.
LFS-6.1.1 may
> provide a workaround I can't test, but it's still a
workaround.
>
> The condition is this: when running Apache, it will
spawn a number of
> httpd helper daemons, as specified in its config file.
When shutting
> httpd down, killproc gets a list of all the httpd
daemons, which it is
> going to try to kill. Meanwhile, sending a TERM to the
first httpd
> daemon will cause it to try kill all its children. It
may successfully
> kill some daemons that killproc will later try to kill,
and receive an
> error. I suggest killproc should check error codes
returned by kill, and
> if the pid is already gone, that's acceptable.
>
> It looks like in LFS-6.1.1 the shutdown script could
just kill the first,
> and hope it gets all the rest. But having the shutdown
script killing
> any stragglers is also appealing.
>
> Paul Rogers (paul.rogers juno.com)
> http://www.xprt.net/~p
grogers/
> http://www.geoc
ities.com/paulgrogers/
> Rogers' Second Law: "Everything you do
communicates."
> (I do not personally endorse any additions after this
line. TANSTAAFL
>
>
--
http://linuxfromscratch.org/mailman/listinfo/blfs-suppo
rt
FAQ: http://
www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page
|