[Zope-Checkins] CVS: Zope/lib/python/zdaemon - schema.xml:1.12.16.1
zdctl.py:1.43.14.2 zdrun.py:1.13.16.6
Fred Drake
cvs-admin at zope.org
Fri Oct 24 17:33:34 EDT 2003
Update of /cvs-repository/Zope/lib/python/zdaemon
In directory cvs.zope.org:/tmp/cvs-serv22928/lib/python/zdaemon
Modified Files:
Tag: Zope-2_7-branch
schema.xml zdctl.py zdrun.py
Log Message:
Change the ZEO control process and configuration schema so that a single
configuration file can be used for both the runzeo and zeoctl scripts.
This makes it easier to keep all the configuration needed to support the
ZEO server process in a single file.
For more explanation of the changes, see
http://zope.org/Members/fdrake/WikiBlog/ZEOServerConfiguration
=== Zope/lib/python/zdaemon/schema.xml 1.12 => 1.12.16.1 ===
--- Zope/lib/python/zdaemon/schema.xml:1.12 Sat Jan 25 22:36:38 2003
+++ Zope/lib/python/zdaemon/schema.xml Fri Oct 24 17:32:59 2003
@@ -17,228 +17,7 @@
<import package="zLOG"/>
- <sectiontype name="runner">
-
- <description>
- This section describes the options for zdctl.py and zdrun.py.
- The only required option is "program". Many other options have
- no default value specified in the schema; in some cases, the
- program calculates a dynamic default, in others, the feature
- associated with the option is disabled.
-
- For those options that also have corresponding command-line
- options, the command line option (short and long form) are given
- here too.
- </description>
-
- <key name="program" datatype="string-list"
- required="yes">
- <description>
- Command-line option: -p or --program (zdctl.py only).
-
- This option gives the command used to start the subprocess
- managed by zdrun.py. This is currently a simple list of
- whitespace-delimited words. The first word is the program
- file, subsequent words are its command line arguments. If the
- program file contains no slashes, it is searched using $PATH.
- (XXX There is no way to to include whitespace in the program
- file or an argument, and under certain circumstances other
- shell metacharacters are also a problem, e.g. the "foreground"
- command of zdctl.py.)
-
- NOTE: zdrun.py doesn't use this option; it uses its positional
- arguments. Rather, zdctl.py uses this option to determine the
- positional argument with which to invoke zdrun.py. (XXX This
- could be better.)
- </description>
- </key>
-
- <key name="python" datatype="existing-path"
- required="no">
- <description>
- Path to the Python interpreter. Used by zdctl.py to start the
- zdrun.py process. Defaults to sys.executable.
- </description>
- </key>
-
- <key name="zdrun" datatype="existing-path"
- required="no">
- <description>
- Path to the zdrun.py script. Used by zdctl.py to start the
- zdrun.py process. Defaults to a file named "zdrun.py" in the
- same directory as zdctl.py.
- </description>
- </key>
-
- <key name="socket-name" datatype="existing-dirpath"
- required="no"
- default="zdsock">
- <description>
- Command-line option: -s or --socket-name.
-
- The pathname of the Unix domain socket used for communication
- between zdctl.py and zdrun.py. The default is relative to the
- current directory in which zdctl.py and zdrun.py are started.
- You want to specify an absolute pathname here.
- </description>
- </key>
-
- <key name="daemon" datatype="boolean"
- required="no"
- default="false">
- <description>
- Command-line option: -d or --daemon.
-
- If this option is true, zdrun.py runs in the background as a
- true daemon. It forks an child process which becomes the
- subprocess manager, while the parent exits (making the shell
- that started it believe it is done). The child process also
- does the following:
-
- - if the directory option is set, change into that directory
-
- - redirect stdin, stdout and stderr to /dev/null
-
- - call setsid() so it becomes a session leader
-
- - call umask(022)
- </description>
- </key>
-
- <key name="directory" datatype="existing-directory"
- required="no">
- <description>
- Command-line option: -z or --directory.
-
- If the daemon option is true, this option can specify a
- directory into which zdrun.py changes as part of the
- "daemonizing". If the daemon option is false, this option is
- ignored.
- </description>
- </key>
-
- <key name="backoff-limit" datatype="integer"
- required="no"
- default="10">
- <description>
- Command-line option: -b or --backoff-limit.
-
- When the subprocess crashes, zdrun.py inserts a one-second
- delay before it restarts it. When the subprocess crashes
- again right away, the delay is incremented by one second, and
- so on. What happens when the delay has reached the value of
- backoff-limit (in seconds), depends on the value of the
- forever option. If forever is false, zdrun.py gives up at
- this point, and exits. An always-crashing subprocess will
- have been restarted exactly backoff-limit times in this case.
- If forever is true, zdrun.py continues to attempt to restart
- the process, keeping the delay at backoff-limit seconds.
-
- If the subprocess stays up for more than backoff-limit
- seconds, the delay is reset to 1 second.
- </description>
- </key>
-
- <key name="forever" datatype="boolean"
- required="no"
- default="false">
- <description>
- Command-line option: -f or --forever.
-
- If this option is true, zdrun.py will keep restarting a
- crashing subprocess forever. If it is false, it will give up
- after backoff-limit crashes in a row. See the description of
- backoff-limit for details.
- </description>
- </key>
-
- <key name="exit-codes" datatype="zdaemon.zdoptions.list_of_ints"
- required="no"
- default="0,2">
- <description>
- Command-line option: -x or --exit-codes.
-
- If the subprocess exits with an exit status that is equal to
- one of the integers in this list, zdrun.py will not restart
- it. The default list requires some explanation. Exit status
- 0 is considered a willful successful exit; the ZEO and Zope
- server processes use this exit status when they want to stop
- without being restarted. (Including in response to a
- SIGTERM.) Exit status 2 is typically issued for command line
- syntax errors; in this case, restarting the program will not
- help!
-
- NOTE: this mechanism overrides the backoff-limit and forever
- options; i.e. even if forever is true, a subprocess exit
- status code in this list makes zdrun.py give up. To disable
- this, change the value to an empty list.
- </description>
- </key>
-
- <key name="user" datatype="string"
- required="no">
- <description>
- Command-line option: -u or --user.
-
- When zdrun.py is started by root, this option specifies the
- user as who the the zdrun.py process (and hence the daemon
- subprocess) will run. This can be a user name or a numeric
- user id. Both the user and the group are set from the
- corresponding password entry, using setuid() and setgid().
- This is done before zdrun.py does anything else besides
- parsing its command line arguments.
-
- NOTE: when zdrun.py is not started by root, specifying this
- option is an error. (XXX This may be a mistake.)
-
- XXX The zdrun.py event log file may be opened *before*
- setuid() is called. Is this good or bad?
- </description>
- </key>
-
- <key name="hang-around" datatype="boolean"
- required="no"
- default="false">
- <description>
- If this option is true, the zdrun.py process will remain even
- when the daemon subprocess is stopped. In this case, zdctl.py
- will restart zdrun.py as necessary. If this option is false,
- zdrun.py will exit when the daemon subprocess is stopped
- (unless zdrun.py intends to restart it).
- </description>
- </key>
-
- <key name="default-to-interactive" datatype="boolean"
- required="no"
- default="true">
- <description>
- If this option is true, zdctl.py enters interactive mode
- when it is invoked without a positional command argument. If
- it is false, you must use the -i or --interactive command line
- option to zdctl.py to enter interactive mode.
- </description>
- </key>
-
- <key name="logfile" datatype="existing-dirpath"
- required="no">
- <description>
- This option specifies a log file that is the default target of
- the "logtail" zdctl.py command.
-
- NOTE: This is NOT the log file to which zdrun.py writes its
- logging messages! That log file is specified by the
- <eventlog> section.
- </description>
- </key>
-
- <key name="prompt" datatype="string"
- required="no" default="zdctl>">
- <description>
- The prompt shown by the controller program.
- </description>
- </key>
-
- </sectiontype>
+ <import package="zdaemon"/>
<section name="*" type="runner" attribute="runner" required="yes" />
=== Zope/lib/python/zdaemon/zdctl.py 1.43.14.1 => 1.43.14.2 ===
--- Zope/lib/python/zdaemon/zdctl.py:1.43.14.1 Mon Sep 15 14:02:55 2003
+++ Zope/lib/python/zdaemon/zdctl.py Fri Oct 24 17:32:59 2003
@@ -196,6 +196,7 @@
self.options.python,
self.options.zdrun,
]
+ args += self._get_override("-S", "schemafile")
args += self._get_override("-C", "configfile")
args += self._get_override("-b", "backofflimit")
args += self._get_override("-d", "daemon", flag=1)
@@ -552,8 +553,9 @@
def fsize(self):
return os.fstat(self.f.fileno())[stat.ST_SIZE]
-def main(args=None):
- options = ZDCtlOptions()
+def main(args=None, options=None):
+ if options is None:
+ options = ZDCtlOptions()
options.realize(args)
c = ZDCmd(options)
if options.args:
=== Zope/lib/python/zdaemon/zdrun.py 1.13.16.5 => 1.13.16.6 ===
--- Zope/lib/python/zdaemon/zdrun.py:1.13.16.5 Wed Oct 1 22:35:22 2003
+++ Zope/lib/python/zdaemon/zdrun.py Fri Oct 24 17:32:59 2003
@@ -89,8 +89,13 @@
class ZDRunOptions(RunnerOptions):
positional_args_allowed = 1
- logsectionname = "eventlog"
+ logsectionname = "runner.eventlog"
program = None
+ schemafile = None
+
+ def __init__(self):
+ RunnerOptions.__init__(self)
+ self.add("schemafile", short="S:", default="schema.xml")
def realize(self, *args, **kwds):
RunnerOptions.realize(self, *args, **kwds)
@@ -101,6 +106,12 @@
if self.sockname:
# Convert socket name to absolute path
self.sockname = os.path.abspath(self.sockname)
+
+ def load_logconf(self, sectname):
+ """Load alternate eventlog if the specified section isn't present."""
+ RunnerOptions.load_logconf(self, sectname)
+ if self.config_logger is None and sectname != "eventlog":
+ RunnerOptions.load_logconf(self, "eventlog")
class Subprocess:
More information about the Zope-Checkins
mailing list