为zdaemon脚本提供ZC Buildout配方
项目描述
zdaemon配方提供生成基于zdaemon的运行脚本的支持。
版本
1.0.0(未发布)
Python 3支持。
0.3.1 (2013-04-01)
添加MANIFEST.in,在迁移到git时是必要的。
0.3 (2013-04-01)
添加了shell-script设置。当为true时,将生成引用软件安装中zdaemon脚本的shell脚本,而不是rc目录中的Python脚本。
0.2 (2008-09-10)
添加了对部署配方name选项的支持。
0.1 (2008-05-01)
初始发布。
详细文档
zdaemon配方
zc.zdaemonrecipe 提供了一个可以用于创建 zdaemon 运行控制脚本的配方。它可以直接用于 buildouts 和其他配方。
它接受 2 个选项
- 程序
程序名称以及可选的命令行参数。(注意:由于 zdaemon 的限制,命令行选项中不能包含空格。)
- zdaemon.conf
可选地,您可以使用 ZConfig 格式提供额外的配置。提供的内容将由 zdaemon 配方根据需要增强。
- 部署
zc.recipe.deployment 部署的名称。如果指定,则
配置文件、日志文件和运行时文件将被放在部署定义的目录中。
将为 zdaemon 转换日志生成一个 logrotate 配置。
让我们看一个例子
>>> write('buildout.cfg', ... ''' ... [buildout] ... parts = run ... ... [run] ... recipe = zc.zdaemonrecipe ... program = sleep 1 ... ''')
如果我们运行 buildout,我们会在 bin 目录中得到一个包含 zdaemon 配置文件和运行脚本的运行部分
>>> from six import print_>>> print_(system(buildout), end='') Installing run. Generated script '/sample-buildout/bin/zdaemon'. Generated script '/sample-buildout/bin/run'.>>> cat('parts', 'run', 'zdaemon.conf') <runner> daemon on directory /sample-buildout/parts/run program sleep 1 socket-name /sample-buildout/parts/run/zdaemon.sock transcript /sample-buildout/parts/run/transcript.log </runner> <BLANKLINE> <eventlog> <logfile> path /sample-buildout/parts/run/transcript.log </logfile> </eventlog>>>> cat('bin', 'run') # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS #!/usr/local/bin/python2.4 <BLANKLINE> import sys sys.path[0:0] = [ ... '/sample-buildout/eggs/zdaemon-2.0-py2.4.egg', '/sample-buildout/eggs/ZConfig-2.4-py2.4.egg', ] <BLANKLINE> import zdaemon.zdctl <BLANKLINE> if __name__ == '__main__': sys.exit(zdaemon.zdctl.main([ '-C', '/sample-buildout/parts/run/zdaemon.conf', ]+sys.argv[1:] ))
zdaemon 也会被安装
>>> ls('eggs') d ZConfig-2.4-py2.4.egg d setuptools-0.6-py2.4.egg d zc.buildout-1.0.0b27-py2.4.egg d zc.recipe.egg-1.0.0-py2.4.egg d zdaemon-2.0-py2.4.egg d zope.testing-3.4-py2.4.egg
您可以使用 eggs 选项指定 zdaemon 的版本。
如果我们指定了部署,则文件将被放置在部署定义的位置
>>> mkdir('etc') >>> mkdir('init.d') >>> mkdir('logrotate')>>> write('buildout.cfg', ... ''' ... [buildout] ... parts = run ... ... [run] ... recipe = zc.zdaemonrecipe ... program = sleep 1 ... deployment = deploy ... ... [deploy] ... name = test-deploy ... etc-directory = etc ... rc-directory = init.d ... log-directory = logs ... run-directory = run ... logrotate-directory = logrotate ... user = bob ... ''')>>> print_(system(buildout), end='') Uninstalling run. Installing run. Generated script '/sample-buildout/init.d/test-deploy-run'.>>> import os >>> os.path.exists('parts/run') False>>> os.path.exists('bin/run') False>>> cat('etc', 'run-zdaemon.conf') <runner> daemon on directory run program sleep 1 socket-name run/run-zdaemon.sock transcript logs/run.log user bob </runner> <BLANKLINE> <eventlog> <logfile> path logs/run.log </logfile> </eventlog>>>> cat('init.d', 'test-deploy-run') # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS #!/usr/local/bin/python2.4 <BLANKLINE> import sys sys.path[0:0] = [ ... '/sample-buildout/eggs/zdaemon-2.0a6-py2.4.egg', '/sample-buildout/eggs/ZConfig-2.4a6-py2.4.egg', ] <BLANKLINE> import zdaemon.zdctl <BLANKLINE> if __name__ == '__main__': sys.exit(zdaemon.zdctl.main([ '-C', 'etc/run-zdaemon.conf', ]+sys.argv[1:] ))>>> cat('logrotate', 'test-deploy-run') logs/run.log { rotate 5 weekly postrotate init.d/test-deploy-run -C etc/run-zdaemon.conf reopen_transcript endscript }
如果您想覆盖生成的 zdaemon 配置的任何部分,只需在实例部分中提供一个 zdaemon.conf 选项即可
>>> write('buildout.cfg', ... ''' ... [buildout] ... parts = run ... ... [run] ... recipe = zc.zdaemonrecipe ... program = sleep 1 ... deployment = deploy ... zdaemon.conf = ... <runner> ... daemon off ... socket-name /sample-buildout/parts/instance/sock ... transcript /dev/null ... </runner> ... <eventlog> ... </eventlog> ... ... [deploy] ... etc-directory = etc ... rc-directory = init.d ... log-directory = logs ... run-directory = run ... logrotate-directory = logrotate ... user = bob ... ''')>>> print_(system(buildout), end='') Uninstalling run. Installing run. Generated script '/sample-buildout/init.d/deploy-run'.>>> cat('etc', 'run-zdaemon.conf') <runner> daemon off directory run program sleep 1 socket-name /sample-buildout/parts/instance/sock transcript /dev/null user bob </runner> <BLANKLINE> <eventlog> </eventlog>
创建shell启动脚本
默认情况下,启动脚本是由使用 zdaemon 模块的 Python 脚本生成的。有时,这很不方便。特别是当部署软件时,生成的 Python 脚本可能在软件更新后损坏,因为它们包含软件 eggs 的路径。我们可以请求调用通用 zdaemon 脚本的 shell 脚本。shell 脚本只依赖于 zdaemon 脚本的路径,这在更新软件时通常不会改变。
要请求 shell 脚本,请添加一个值为 true 的 shell-script 选项
>>> write('buildout.cfg', ... ''' ... [buildout] ... parts = run ... ... [run] ... recipe = zc.zdaemonrecipe ... program = sleep 1 ... shell-script = true ... deployment = deploy ... ... [deploy] ... name = test-deploy ... etc-directory = etc ... rc-directory = init.d ... log-directory = logs ... run-directory = run ... logrotate-directory = logrotate ... user = alice ... ''')>>> print_(system(buildout), end='') # doctest: +NORMALIZE_WHITESPACE Uninstalling run. Installing run. zc.zdaemonrecipe: Generated shell script '/sample-buildout/init.d/test-deploy-run'.>>> cat('init.d', 'test-deploy-run') # doctest: +NORMALIZE_WHITESPACE #!/bin/sh su alice -c \ "/sample-buildout/bin/zdaemon -C '/sample-buildout/etc/run-zdaemon.conf' $*">>> ls('etc') - run-zdaemon.conf
在其他配方中使用zdaemon配方
要从其他配方使用守护进程配方,只需在您的配方 __init__ 中实例化一个实例,传递您的 __init__ 参数,然后在您的安装方法中调用实例的安装即可。
下载
项目详情
zc.zdaemonrecipe-1.0.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | e89693f40655164c818f04ff7e70d858eae809598a0afea406f201d025722b43 |
|
MD5 | 05498cb2c46efb992451b1daf68ed245 |
|
BLAKE2b-256 | 140e05ded59f327fe93e71b6fcd9263fe82016cfeec2c3a13b055bbd9119a414 |