跳转到主要内容

为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 (10.4 kB 查看散列)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面