[Web-SIG] daemon tools
Jim Fulton
jim at zope.com
Wed Mar 7 11:16:36 CET 2007
On Mar 5, 2007, at 1:38 PM, Robert Brewer wrote:
...
> What several people have asked for is the ability to combine
> applications (and WSGI components) from a variety of frameworks into a
> single "website". What I'm proposing is that we standardize on a
> set of
> topics/channels/events/signals that are "site-wide" events, like
> start,
> stop, restart and graceful. If we collaborated on a tool to manage
> those, we could potentially make the codebases of each project
> smaller,
> not just by removing the event manager, but by collaborating on a
> set of
> standard event handlers, one of which could be a "daemonize me"
> handler.
Agreed.
>
> What we have now:
>
> CherryPy Zope Django
> -------- ------ -------
> ??? events signals
> | | |
> autoreload ??? autoreload
> | | |
> engine zdrun ???
> | | |
> ??? zdctl ???
>
> What we could have instead:
>
> webctl modpython_gateway
> | /
> ------------ pywebd ------------
> / | \
> -------- ------ ------
> CherryPy Zope Django
>
>
> ...where the "pywebd" module:
>
> 1. Composes the WSGI stack (provides a library to do so at least),
> 2. Notifies frameworks of site-wide events (like start, stop, restart
> and graceful),
> 3. Provides plugins that frameworks can "notify"; for example, adding
> files to an autoreload plugin.
This sounds great to me.
>> I think your "sitewide container" is the main program that loads
>> the WSGI components. This might be Apache, if mod_python is
>> used, or some Python script/program.
>
> Apache itself is not going to be the chunk of code that loads the WSGI
> components. In my head, a modpython_gateway module (or something
> similar) would ask pywebd to do that.
Right.
>> I was discussing a tool that managed the main program in the
>> latter case. Something that started and restarted it, provided
>> status information, helped it to run as a proper daemon and so on.
>
> Sure, something like zdctl? But zdctl doesn't do the actual fork,
> zdrun
> does...so what does "help run as a proper daemon" mean?
(zdrun is really an internal implementation detail of zdaemon. The
latest version of zdaemon hides this much more than earlier versions. )
Logically, zdctl runs zdrun, which forks and execs the application
process. (In the latest version, there is just one script, zdaemon,
that loads either the zdctl or zdrun entry point when it is run.)
zdrun does the deamonizing steps:
- disconnecting from the controlling terminal, and
- changing to a different user if requested
before forking and execing the application.
I see a division of responsibilities between:
- A facility for managing an application process
- start/stop/status/etc
- passing environment variables, providing some logging support if
necessary (especially for applications that spew to standard err/out).
- Optionally providing other daemon behaviors like disconnecting
from the controlling terminal, changing user, etc. zdaemon provides
this service on behalf of applications.
- A main program that provides common application-level services like
the ones you describe above.
- Optionally providing other daemon behaviors like disconnecting
from the controlling terminal, changing user, etc. ll.deamon
provides some of these services within an application.
A question is whether to provide the daemonizing support in the main
program or in the controlling program. Note that in answering this
question, we probably need to have an idea how this will work on
windows. If Unix-specific daemonizing code is in the main
application, then the application won't be portable. Of course, if
the main program is generic, it might not be a big deal to have
separate versions for Windows and Unix.
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Web-SIG
mailing list