Skip to main content

cron4plone 可以在 Plone 中执行计划任务

项目描述

产品描述

Cron4Plone 可以在 Plone 中执行计划任务,其语法非常类似于 *NIX 系统的 cron 守护程序。它插入 Zope 的 ClockServer 机器。

cron4plone 还可以选择使用 unimr.memcachedlock 来确保一次只运行一个任务,即使在多台机器上使用多个 zeo 客户端等分布式环境时也是如此。

基本原理

Cron4plone 使用时钟服务器并允许高级任务调度:

  • 在预定时间安排的任务。例如,我想在每月第一天凌晨 3 点执行某项任务。

  • 单线程运行任务:我们不希望 2 个线程同时运行同一个任务。仅当使用时钟服务器时,如果任务花费的时间比滴答周期长,则可能会发生这种情况。

安装

1.在buildout(或zope.conf)中配置ticker

buildout.cfg

[instance]
...
eggs =
    Products.cron4plone

zope-conf-additional =
  <clock-server>
      method /<your-plone-site>/@@cron-tick
      period 60
      user admin
      password admin_password
  </clock-server>

用户密码变量可以省略,但如果您要调用需要特殊权限的视图(例如尝试创建内容时),则需要这些变量。

1.1 多个实例

如果您的构建中有多个 Zope 实例,则将zope-conf-additional仅添加到一个实例是有意义的 。这将确保只有一个实例会尝试运行@@cron-tick方法。

Products.cron4plone应该存在于所有实例中,否则实例将没有用于 CronTool 对象的软件。这将导致启动错误,您将无法更改 cron 作业。

1.2 可选择使用 memcached 服务器来共享锁

如果您的 Zope 实例在多台机器上运行,您将使用memcached 。在这种情况下,所有机器都会同时运行@@cron-tick,这不是您想要的,尤其是在创建内容时。Memcached 将在多台机器之间共享一个锁,因此只有一台机器会运行 cron 作业。

memcached 服务器是一个独立的服务器进程,您可以通过您最喜欢的包管理器获取它(对于 Debian / Ubuntu: apt-get install memcached

安装和配置memcached,并将unimr.memcachedlock添加到 buildout.cfg

[instance]
...
eggs =
    Products.cron4plone
    unimr.memcachedlock

您可以在 MEMCACHEDLOCK_SERVERS 环境变量中指定运行 memcached 服务器的位置,例如:

zope-conf-additional =
  <environment>
      MEMCACHEDLOCK_SERVERS <ip/hostname of host1>:<port>,<ip/hostname of host2>:<port>
  </environment>

memcached 的默认端口是 11211。

1.3 可选地从 buildout 安装 memcached

您还可以从 buildout构建memcached :

parts +=
    memcached
    memcached-ctl
    supervisor

[memcached]
recipe = zc.recipe.cmmi
url = http://memcached.googlecode.com/files/memcached-1.4.0.tar.gz
extra_options = --with-libevent=${libevent:location}

[memcached-ctl]
recipe = ore.recipe.fs:mkfile
path = ${buildout:bin-directory}/memcached
mode = 0755
content =
 #!/bin/sh
 PIDFILE=${memcached:location}/memcached.pid
    case "$1" in
      start)
       ${memcached:location}/bin/memcached -d -P $PIDFILE
        ;;
      stop)
        kill `cat $PIDFILE`
        ;;
      restart|force-reload)
        $0 stop
        sleep 1
        $0 start
        ;;
      *)
        echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
        exit 1
        ;;
    esac

您需要有 libevent 开发库(apt-get install libevent-dev)或在 buildout 中:

[libevent]
recipe = zc.recipe.cmmi
url = http://www.monkey.org/~provos/libevent-1.3b.tar.gz

如果您从 buildout 构建 libevent 库,请确保在启动 memcached 服务器之前 libevent.so(共享对象)文件位于您的 LD_LIBRARY_PATH 中。

如果你使用 supervisor,你可以添加这样一行来启动 memcached 服务器:

10 memcached ${buildout:directory}/parts/memcached/bin/memcached

2.配置定时任务

在 Plone 站点设置中,转到 cron4plone 配置。此表单可用于输入类似 cron 的作业。

cron 作业应该有 5 个元素:分钟、小时、day_of_month、月份和命令表达式。对于command,可以使用 TAL 表达式(包括 'python:')。变量门户是 Plone 站点根目录。

例子:

* 11 * * portal/@@run_me
15,30 * * * python: portal.my_tool.runThis()

3. 拭目以待

在 ZMI 中,转到 CronTool。如果 cronjob 已运行,则会显示历史记录。

去做

  • 类似 cron 的语法中缺少星期几,添加它。

  • 每次作业运行时发送邮件报告,或者仅在作业失败时发送邮件报告。

  • 改进文档测试,目前测试有基本覆盖。

  • 也许制作一个配置表单,允许没有 cron 语法知识的用户输入作业。

许可证和学分

作者:Huub BoumaKim Chee Leong

许可证:本产品根据 GNU 公共许可证第 2 版获得许可。请参阅本产品中包含的文件 docs/LICENSE.txt。

部分代码取自Ingeniwebplonemaintenance

变更日志

1.1.11 (2014-10-19)

  • 添加了 z3c-slug 并确保在 zcml 中加载了 CMF.Core 权限。还添加了一个 gitignore。[本尼男孩]

1.1.10 (2012-10-08)

  • 使 configlet 在实现 IPloneSiteRoot [huub_bouma] 的上下文上工作

1.1.9 (2011-05-19)

  • 添加 MANIFEST.in 以在发布中包含文档。[WouterVH]

  • 修复了 isPending 方法中的错误:默认参数必须在方法内部,否则它将具有与实例启动时相同的值,因此任务不会按预期重新运行 [svincic]

1.1.8 (2011-03-30)

  • 通过在首次使用时将预期值转换为整数来修复 crontab 实用程序中日期的字符串格式问题。[大卫]

1.1.7 (2011-03-25)

  • 将所有 DateTime 调用转换为使用 UTC。这修复了切换到夏令时时的错误。(感谢错误报告 + 修复 Michael Lindig)

  • 通过首先转换为整数来修复逗号分隔的 cron 语法中的比较错误。(感谢错误报告 + 修复 David Breitkreutz)

1.1.6 (2010-10-19)

  • 不再支持 /N 和 NM 格式的扩展 cron 语法 这没有按预期工作。cron_utils 中的逻辑是有缺陷的 icw 语法。该旧代码已移至枚举支持分支。

1.1.5rc1 (2010-07-30)

  • 添加语言环境目录 [WouterVH]

  • 使用 pyflakes 进行代码清理 [WouterVH]

  • 删除了 tests.py 模块,因为我们已经有一个测试目录 [WouterVH]

  • 删除 setup.cfg 以完全控制已发布鸡蛋的名称。[WouterVH,呜呜呜]

  • 扩展和重新格式化的文档 [khink]

1.1.4

  • Derek Broughton 的补丁扩展了 cron 语法,因此您现在还可以使用 /N 和 NM 格式

1.1.3

  • egg 服务器 (pypi plone.org) 上 1.1.2 版本的 egg 已损坏。

  • 修复了 README,包含无效的 rst

1.1.2

  • 修复了错误,缺少“ConflictError”导入

1.1.1

  • 与 memcached 共享锁

1.0

  • 初始发行

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

Products.cron4plone-1.1.11.zip (42.3 kB 查看哈希

已上传 source