具有自我修复和作业依赖性的cron作业管理器。

crontabber的Python项目详细描述


具有自我修复和作业依赖性的cron作业管理器。

许可证:MPL 2

Coverage Status

Build Status

如何运行测试

首先,您需要创建一个专用的测试数据库。我们推荐你 称之为test_crontabber。那么你需要 它。

在运行测试之前,您需要安装一些附加程序才能 完全运行测试:

pip install -r test-requirements.txt

接下来,在项目的根目录中创建一个名为 test-crontabber.ini应该是这样的:

[crontabber]
user=myusername
password=mypassword
dbname=test_crontabber

开始运行所有测试:

PYTHONPATH=. nosetests

如果要在特定文件中运行特定测试 类,您可以按照nosetests标准定义它,如下所示 示例:

PYTHONPATH=. nosetests tests crontabber/tests/test_crontabber.py:TestCrontabber.test_basic_run_job

如果希望测试在第一个测试失败后立即停止,请添加-x 上面同样的命令。

另外,如果希望nosetests捕获stdout添加-s 执行上面的命令。

如何进行代码覆盖率分析

首先你需要安装 coverage模块。那么, 使用nosetests,您可以运行以下命令:

PYTHONPATH=. nosetests --with-coverage --cover-erase --cover-html --cover-package=crontabber

运行后,您可以在浏览器中打开文件cover/index.html

如何运行示例应用程序

示例应用程序帮助您设置一个游乐场,以便在 测试crontabber以更好地了解它的工作原理。

最好从阅读^{tt10}开始$ 归档并完成其步骤。一旦你有了基本的工作,你就可以 开始尝试添加作业类。

锁定工作原理

Crontabber支持锁定。基本上就是说如果你开始 crontabber的实例,而它已经在另一个 终端/服务器第二个将很早出现。这只适用于 如果有实际的工作正在进行。

有两种锁定方式。

  1. general locking.crontabber在启动之前所做的第一件事 一个应用程序询问状态(存储在postgresql中)是否正在进行并且 如果是,则存在一个{TT11} $的错误代码。
  2. sub second锁定。如果常规锁定(见上文)显示 “不,工作没有进行”,它将继续更新 用row-level locking transaction in PostgreSQL表示。 这基本上意味着postgresql只允许一个UPDATE 从最先到达那里的过程。第二个crontabber过程 如果第一个错误将以一个{TT13}$的错误代码提前退出。 crontabber进程首先运行了UPDATE

假设两个独立的终端在几乎相同的情况下启动crontabber 时间:

# Terminal 1
$ python crontabber.py --admin.conf=crontabber.ini
$ echo $?
0
# Terminal 2 (started almost simultaneously)
$ python crontabber.py --admin.conf=crontabber.ini
$ echo $?
3

注意!< /强>如果作业已经进行到最大时间段,则 锁定被忽略。这由config选项控制 crontabber.max_ongoing_age_hours,默认为12小时。 如果crontabber更新了启动 作业,然后当它尝试更新完成的状态时 (成功与否)并且写入失败,例如 连接到PostgreSQL。如果发生这种事,克朗塔伯会 不管怎么说,还是忽略锁并运行它。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我应该关闭tcp连接吗?   java指定初始化一个有引用和没有引用的类之间的区别   Java JSON反序列化错误   java将InputStream插入PostgreSQL   java Android屏幕在活动启动时取消伪装   java两个字符串实例看起来相同,但它们的哈希代码不同   java如何创建**数字**而不是字符串的数组列表?   java我可以确定由正则表达式模式匹配的第一个字符集吗?   java以编程方式更改日期范围的日期格式   java Hibernate在加载时填充自动连接字段   java如何使两个不相关的实体(两个存储库)同时在一个项目中运行?可能吗?   使用singlechildevent检索java Firebase数据   在安卓中尝试动态添加片段时未找到java ID   在HTML中编码Java GB2312字符串无法正确显示   java在缓慢的消费卡夫卡上处理背压并避免重新平衡   由hibernate生成的java查询过于冗长