跳过主内容

具有自我修复和作业依赖的cron作业运行程序。

项目描述

具有自我修复和作业依赖的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 文件。

如何运行exampleapp

示例应用程序帮助您搭建一个沙盒环境,用于测试crontabber,以更好地理解其工作原理。

开始的最佳方式是阅读 exampleapp/README.md 文件并按照其步骤进行。一旦您掌握了基础知识,就可以开始尝试添加您的作业类。

锁定机制是如何工作的

crontabber支持锁定功能。这意味着如果您在另一个终端/服务器中crontabber已经开始运行时启动第二个实例,则第二个实例将提前退出。这仅适用于实际作业正在进行时。

存在两种锁定类型。

  1. 通用锁定。 crontabber在启动应用程序之前,首先会询问状态(存储在PostgreSQL中)是否正在进行中,如果是,则使用错误代码 3 提前退出。

  2. 亚秒锁定。 如果通用锁定(如上所述)表示“不,作业未进行中”,则它将使用PostgreSQL的行级锁定事务更新状态。这基本上意味着PostgreSQL仅允许一个进程首先进行单个UPDATE操作。如果第一个crontabber进程成功执行了UPDATE,则第二个crontabber进程将使用错误代码 2 提前退出。

想象两个不同的终端几乎同时启动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

注意! 如果作业已经运行了最长的时间,则忽略锁定。这由配置选项 crontabber.max_ongoing_age_hours 控制,默认为 12小时。这适用于crontabber开始作业后更新状态,然后尝试更新完成状态(成功或不成功),如果写入失败,例如无法连接到PostgreSQL。如果发生这种情况,crontabber将忽略锁定并继续运行。

项目详情


下载文件

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

源代码分发

crontabber-0.18.1.tar.gz (51.3 kB 查看散列)

上传时间 源代码

构建分发

crontabber-0.18.1-py2-none-any.whl (55.4 kB 查看散列)

上传时间 Python 2

由以下支持