daemon --makepid --fork

Elan Ruusamäe glen at pld-linux.org
Fri Sep 9 23:14:17 CEST 2016


to cut to the chase, looks like there's problem with using both of those 
flags together:

1. if RC_LOGGING=yes
the the pid written to pidfile is correct
but process started has fd=1 and fd=2 pipe which is disconnected after 
initlog exits. no process likes this, some abort when they receive SIGPIPE

2. if RC_LOGGING=no
the pid written to file is incorrect, it's sone actual_pid+N, where N is 1-2
stdin,stdout are /dev/null, so that is fine for most of the processes 
where we want to do "daemonize" for themselves.

for first problem, could solve this by >/dev/null 2>/dev/null in our 
makepid script
this means that initlog will not "capture" or "see" anything from those 
processes

for second problem, probably could use our makepid wrapper instead of 
using --makepid from start-stop-daemon.

i've committed 43f8f34 to rc-scripts repo where such behaviour could be 
analyzed

ps: know any good framework to use to write such tests for shell scripts?

ps2: usually i'd say lets rip out the RC_LOGGING=yes code, but seems 
RC_LOGGING=no isn't much used by other pld devs than me, so it's not 
probably most compatible and has unexpected results (like this bugreport 
about wring pid written). most horrible experience was causing lighttpd 
terminated with SIGKILL every time logrotate ran at night, fixed by this 
commit:

commit 6154a5cecca4c7cf7252a230f81d2fa913c0bfab
Author: Elan Ruusamäe <glen at pld-linux.org>
Date:   Wed Dec 5 20:54:15 2012 +0000

     killproc: improve experimental start-stop-daemon based killing.

     do not send --retry, in case we specify a signal to kill (usually HUP)
     as processes do not usually exit (remove their pid from pidfile) if 
they receive HUP


     svn-id: @12603

ps3: don't bother replying something poisonous about why don't i go use 
systemd.

-- 
glen



More information about the pld-devel-en mailing list