I'm not sure exactly in what context your message needs to be taken - is that about a tool you have written or are writing, or something else ? - but if you're going to work on dependency management, it's important that you get it right. It's complex stuff that needs planning and thought.
* implement a ./needs directory. This would have symlinks to any definitions that would be required to run before the main definition can run. For instance, Debian's version of lightdm requires that dbus be running, or it will abort. Should a ./needs not be met, the current definition will receive a ./down file, write out a message indicating what service blocked it from starting, and then will send a "down service" to itself.
For instance, I'm convinced that the approach you're taking here actually takes away from reliability. Down files are dangerous: they break the supervision chain guarantee. If the supervisor dies and is respawned by its parent, it *will not* restart the service if there's a down file. You want down files to be very temporary, for debugging or something, you don't want them to be a part of your normal operation. I firmly believe that in order to keep boot and shutdown procedures fast and simple, and avoid reinventing the kitchen sink, any dependency management on top of a supervision system should work *offline*. Keep the dependency manager out of the supervisor's way in normal operation; just use it to generate state change scripts. If your dependency manager works online, you *will* bring services down when you don't want to. You *will* have more headaches making things work than if you had no dependency manager at all. I guarantee it. I don't know how to design such a beast. I'm not there yet, I haven't given it any thought. But a general principle applies: don't do more, do less. If something is unnecessary, don't do it. What a supervision framework needs is a partial order on how to bring services up or down at boot time and shutdown time, and other global state changes; not instructions on what to do in normal operation. Stay out of the way of the supervisor outside of a global state change. -- Laurent