具有自我修复和作业依赖的cron作业运行程序。
项目描述
具有自我修复和作业依赖的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 文件。
如何运行exampleapp
示例应用程序帮助您搭建一个沙盒环境,用于测试crontabber,以更好地理解其工作原理。
开始的最佳方式是阅读 exampleapp/README.md 文件并按照其步骤进行。一旦您掌握了基础知识,就可以开始尝试添加您的作业类。
锁定机制是如何工作的
crontabber支持锁定功能。这意味着如果您在另一个终端/服务器中crontabber已经开始运行时启动第二个实例,则第二个实例将提前退出。这仅适用于实际作业正在进行时。
存在两种锁定类型。
通用锁定。 crontabber在启动应用程序之前,首先会询问状态(存储在PostgreSQL中)是否正在进行中,如果是,则使用错误代码 3 提前退出。
亚秒锁定。 如果通用锁定(如上所述)表示“不,作业未进行中”,则它将使用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的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | dfe4086a23928647bb021ba0a8bf3e7bb9e86792042506dcca5040061b310d3e |
|
MD5 | f13bd8aa33018e7ccb9fe1f29a30e5d6 |
|
BLAKE2b-256 | b854643a25075bb9ceee2854c5ba723618d13e01142afb18e31039d776b192d2 |