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.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 语法知识的用户输入作业。
许可证和学分
许可证:本产品根据 GNU 公共许可证第 2 版获得许可。请参阅本产品中包含的文件 docs/LICENSE.txt。
部分代码取自Ingeniweb的plonemaintenance。
变更日志
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
初始发行