Daemonizing Logic Error
Devin Bayer
web at t-0.be
Sat May 16 11:13:31 CEST 2009
Hello:
We faced an issue when nagios silently failed to fork. Since it's
part of our startup scripts, this delayed the rest of the daemons
until nagios exited. For this reason nagios should take care, that if
it doesn't daemonize correctly, it should die. We are using nagios
3.0.5, but I see the bug still exists in the trunk. Here is our
nagios.log showing the problem:
[1242115575] Nagios 3.0.5 starting... (PID=773)
[1242115575] Local time is Tue May 12 11:06:15 EEST 2009
[1242115575] LOG VERSION: 2.0
[1242115575] Finished daemonizing... (New PID=773)
Notice the "New PID" equals the old PID. I think this is the problem
code, from base/utils.c:
2036 : /* check for SIGHUP */
2037 : if(val==1 && (pid=(pid_t)pidno)==getpid()){
2038 : close(lockfile);
2039 : return OK;
2040 : }
If nagios is started at boot time, it's somewhat likely it will have
about the same PID on the next boot. So if the lockfile isn't cleaned
for some reason, then nagios will start, read the lockfile, and not
fork.
2042 : /* exit on errors... */
2043 : if((pid=fork())<0)
2044 : return(ERROR);
This looks like another bug. If fork fails, we return ERROR, but the
return code is just silently ignored.
Thanks,
Devin
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables
unlimited royalty-free distribution of the report engine
for externally facing server and web deployment.
http://p.sf.net/sfu/businessobjects
More information about the Developers
mailing list