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>
可以省略 user 和 password 变量,但如果您想调用需要特殊权限的视图,则需要这些变量,例如在尝试创建内容时。
1.1 多实例
如果您在 buildout 中有多个 Zope 实例,则只向一个实例添加 zope-conf-additional 是合理的。这将确保只有一个实例尝试运行 @@cron-tick 方法。
Products.cron4plone 应该存在于所有实例中,否则实例将没有 CronTool 对象的软件。这将在启动时导致错误,并且您无法更改 cron 作业。
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 Bouma 和 Kim 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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 20f1b6ab481213d59b81c57a5d8ff057c698224d8fccb53879898cd7d751d0e5 |
|
MD5 | 7947d99f89a71d353d74ffe47e4ae6a9 |
|
BLAKE2b-256 | c911b7dd34e7756bb835abeeb68189b24f571e3f0e15d5173f76808494c28cbc |