具有自我修复和作业依赖性的cron作业管理器。
crontabber的Python项目详细描述
具有自我修复和作业依赖性的cron作业管理器。
许可证:MPL 2
如何运行测试
首先,您需要创建一个专用的测试数据库。我们推荐你 称之为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的实例,而它已经在另一个 终端/服务器第二个将很早出现。这只适用于 如果有实际的工作正在进行。
有两种锁定方式。
- general locking.crontabber在启动之前所做的第一件事 一个应用程序询问状态(存储在postgresql中)是否正在进行并且 如果是,则存在一个{TT11} $的错误代码。
- 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。如果发生这种事,克朗塔伯会 不管怎么说,还是忽略锁并运行它。