Expireafter for daemons should be infinite. But the current value for some daemons (for example @cf-monitord@ and @cf-serverd@) is set to 0 or 1, which means that once a new process is executed, it kills and replaces the old one.
BTW ifelapsed should be zero (I believe that is the case), because after a daemon has exited, we don't want to wait in order to restart it.
Example buggy code for cf-serverd in @cf-serverd-functions.c:AcquireServerLock()@:
TransactionContext tc =
return AcquireLock(ctx, pp->promiser, VUQNAME, CFSTARTTIME, tc, pp, false);