BTW, runit also comes with svlogd and chpst, both of which have frequently proved invaluable. The latter is useful in its own right.
Most of the tools discussed either lack flexibility, try to do too much, or simply don't offer any benefits over runit and company.
tl;dr use runit
exec celeryd $@
Also, another nice thing, very useful for daemons that spawn their own subprocesses is killasgroup option. This is worth mentioning given the celery examples - celery can and will leave orphan processes around between restarts ...
pid = fork()
if pid: # parent
else: # child
Needing to run "nginx -t" instead of "/etc/init.d/nginx configtest" seems like a minor tradeoff for the benefits Upstart provides. It's even shorter to type!
One of the most interesting features, for me, is that Supervisor has an XML-RPC interface, allowing for some creative interaction with supervisor and the processes it manages.