On 20/08/2015 16:43, Colin Booth wrote:
Yeah, this is for the special case where you have a daemon that
doesn't do readiness notification but also has a non-trivial amount of
initialization work before it starts. For most things doing the below
talked about oneshot/longrun split is best, but sometimes you need to
run that initialization every time (data validators are the most
obvious example).

 In that case, yes,
 "if { init } if { notification } daemon" is probably the best. It
represents service readiness almost correctly, if "service" includes
the initialization.


It does provide notification, but only if you're running under
systemd. At least according to the sd_notify() docs. I'll see about
faking up the environment so sd_notify() is happy and report back.

 systemd's notification API is a pain. It forces you to have a daemon
listening on a Unix socket. So basically you'd have to have a
"notification receiver" service, communicating with the supervisors -
which eventually makes it a lot simpler to integrate everything into
a single binary.
 This API was made to make systemd look like the only possible design
for a service manager. That's political design to the utmost, and I
hate that with a passion.

 I have a wrapper to make things work the other way (i.e. using
s6-like daemons under systemd), but a wrapper that would actually
understand sd_notify() notifications would be much more painful to
write.

Actually, the more I think about it, the less s6-rc-update will help
me avoid reboots in the short term since part of what I need to get
back is a pristine post-boot environment.

 What do you have in that post-boot environment that would be different
from what you have after shutting down all your s6-rc services and
wiping the live directory ?

--
 Laurent

Reply via email to