跳转到主要内容

cron4plone 可在Plone中执行计划任务

项目描述

产品描述

Cron4Plone 可以在 Plone 中执行定时任务,语法与 *NIX 系统的 cron 守护进程非常相似。它连接到 Zope 的 ClockServer 机制。

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

理由

Cron4plone 使用 clockserver 并允许高级任务调度

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

  • 单线程运行任务:我们不希望同时有两个线程运行相同的任务。当使用时钟服务器时,如果任务执行时间超过滴答周期,则可能会发生这种情况。

安装

1. 在 buildout 中配置滴答器(或 zope.conf)

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>

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

1.1 多实例

如果您在 buildout 中有多个 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

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

如果您使用 supervisor,您可以在启动 memcached 服务器时添加类似以下行

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

2. 配置计划任务

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

cron 作业应具有 5 个元素:分钟、小时、每月的天、月份和命令表达式。对于 command,可以使用 TAL 表达式(包括“python:”)。变量 portal 是 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文件。

部分代码来自 plonemaintenance,由 Ingeniweb 提供。

变更日志

1.1.11 (2014-10-19)

  • 添加了z3c-slug,并确保在zcml中加载了CMF.Core权限。还添加了gitignore。[benniboy]

1.1.10 (2012-10-08)

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

1.1.9 (2011-05-19)

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

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

1.1.8 (2011-03-30)

  • 通过在第一次使用时将预期值转换为整数,修复了crontab工具中日期字符串格式化的问题。[davidjb]

1.1.7 (2011-03-25)

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

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

1.1.6 (2010-10-19)

  • 不再支持带有/N和N-M格式的扩展cron语法。这没有按预期工作。cron_utils中的逻辑与该语法有缺陷。旧代码已移动到enumeration-support分支。

1.1.5rc1(2010-07-30)

  • 添加了locales目录。[WouterVH]

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

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

  • 删除了setup.cfg,以便完全控制发布egg的名称。[WouterVH, khink]

  • 扩展并重新格式化文档。[khink]

1.1.4

  • Derek Broughton的补丁扩展了cron语法,现在也可以使用/N和N-M格式。

1.1.3

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

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

1.1.2

  • 修复了bug,缺少“ConflictError”导入。

1.1.1

  • 与memcached共享锁

1.0

  • 初始发布

项目详情


下载文件

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

源分布

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

上传时间

支持