django的cron管理应用程序

django-cronman的Python项目详细描述


Django Cronman

概述

django应用程序在python级别定义和管理周期性任务。

安装

django cronman可以使用pip直接从pypi安装

pip install django-cronman

您还可以使用cron remote manager来安装它,并附加依赖项。

pip install django-cronman[redis]

定义新的cron作业

cron作业定义受django管理配置的启发。要添加新作业,必须创建cron job.py 在应用程序中创建basecronjob子类并注册它:

fromcronman.jobimportBaseCronJob,cron_job_registryclassHelloWorld(BaseCronJob):"""Demo Cron Job class"""defrun(self):"""Main logic"""passcron_job_registry.register(HelloWorld)

cron作业类按名称注册(并引用),可以在注册时自定义:

cron_job_registry.register(HelloWorld,name='Hello')

还可以检索或注销类(例如,在测试时):

cron_job_registry.get('HelloWorld')cron_job_registry.unregister('HelloWorld')

如果给定的应用程序中有一个以上的cron作业,建议创建一个包而不是单个的cron作业模块,为每个类创建一个子模块,并在包的\uu in it.py中进行导入和注册

配置cron作业

为了确保cron作业定期执行,您需要向cron作业添加一个条目:

CRON_JOBS=(...# (<time spec>, <job spec>)# 'HelloWorld' will be executed a 5:15AM every day:('   15   5   *   *   *','HelloWorld'),)

将cronman jobs模块设置为指定cron作业的模块的点路径名。请记住,此模块必须具有cron_jobs属性。默认情况下,cronman_jobs_modulenone。例如:

# settings_local.pyCRONMAN_JOBS_MODULE='app.cron_jobs.name'

运行调度程序

cron作业在设置中定义。cronman_作业模块cron应用程序中的cron_调度程序命令启动。 此命令构造应在当前时间段(现在为+/-1分钟)执行的作业列表。 并为每个作业创建一个新的子流程。

python manage.py cron_scheduler run

此命令应添加到负责运行定期任务的服务器上的系统crontab中 每2分钟执行一次。

运行单个cron作业

commandcron_worker run<;job spec>;负责执行cron作业:

python manage.py cron_worker run HelloWorld

cron作业参数

cron作业类可以接受传递给run方法的参数作为位置参数或命名参数:

pip install django-cronman
0
pip install django-cronman
1

参数作为字符串值传递,任何类型转换都应该在run方法中进行。 支持带空格的带引号字符串,但逗号只能用作参数分隔符:

pip install django-cronman
2

cronman.utils模块中有用于提取列表和布尔值的实用函数。

配置cronitor支持

cron_worker命令可以在作业启动、完成或失败时通知cron it or。 要启用此功能,您必须:

  1. 在设置中启用cronitor支持
  2. 配置cron作业类:
pip install django-cronman
3

当cron作业启动时,我们可以通过设置cronitor ping_run=falsecronitor ping_fail=false来禁用向cronitor发送可选的"run"和"fail"ping,但这似乎不是必需的。

重要提示: 在cronitor仪表板中添加新监视器时,请使用类型heartbeat。避免使用cron job监视器,因为它们发送的误报警报"未按计划运行"。

配置锁

任务可以获取锁以防止并发调用。锁的pidfiles格式位于settings.cronman_data_dir中。要修改给定cron作业类的锁定行为,可以设置lock_type属性:

pip install django-cronman
4

支持以下值:

  • -无锁,允许并发
  • locktype.class(默认)-只能同时运行给定cron作业类的一个实例(例如foo:p=1foo:p=2不能同时工作)
  • locktype.params-只有一个类和参数的组合可以同时运行(例如foo:p=1foo:p=2可以同时工作,但是禁止再次调用foo:p=1) 由cron_worker命令获取/释放的锁。

我们可以为几个cron作业类配置一个共享锁,以确保其中只有一个正在运行:

pip install django-cronman
5

配置CPU和IO优先级

我们可以使用worker\u cpu优先级属性将cpu优先级(nice)分配给cron作业类

pip install django-cronman
6

我们还可以通过将cronman.taxonomies.io priority中的一个值分配给worker io_priority属性来定制io优先级(io nice),但在大多数情况下这是不必要的,因为nice也会更改io优先级。

命令cron-u scheduler runcron-worker resume和cron-jobruncrontasks将生成与分配给cron作业类的cpu和io优先级相关的工作进程。当运行cron-worker run时,这些设置不会被强制执行,因此您必须手动为这些调用预先准备好nice/ionice

列出并终止正在运行的cron作业

commandcron_worker status显示当前正在运行的cron作业-pidfile name、pid和status(alivedead)。 搜索结果可以受到作业规范(cron作业名称、参数)的限制

pip install django-cronman
7

commandcron_worker kill在进程拒绝终止时优雅地(sigterm)或强制地终止活动cron作业(sigkill)。任务列表可以由作业规范限制

pip install django-cronman
8

也可以使用pid来终止单个进程:

pip install django-cronman
9

恢复cron作业

cron作业的子集在被终止后可以恢复:

pip install django-cronman[redis]
0

commandcron_worker resume使用canu resume启动所有已终止的cron作业功能:

pip install django-cronman[redis]
1

若要删除所有有关死机cron作业的条目并确保它们不会被恢复,我们可以运行cron_worker clean命令:

pip install django-cronman[redis]
2

commandcron_worker suspend清除以前所有关于死cron作业的条目,然后杀死所有正在运行的条目,以确保下一个resume将只引发最近终止的作业:

pip install django-cronman[redis]
3

列出可用的cron作业

commandcron_worker info显示所有可用cron作业的列表:

pip install django-cronman[redis]
4

当cron作业名称传递给此命令时,系统将显示docstring和给定cron作业的参数:

pip install django-cronman[redis]
5

禁用计划程序

可以暂时禁用计划程序命令:

pip install django-cronman[redis]
6

稍后重新启用:

pip install django-cronman[redis]
7

当调度程序被禁用时,调用cron_scheduler run不会生成工作进程。

向哨兵发送错误信息

cron作业类中的错误由cron-worker截获,并使用与其他django命令相同的配置发送到sentry(settings.raven-u-management-command-u-config)。 如果定义了settings.cronman_raven_cmd,调度器将使用它作为工作进程的执行脚本,例如 python manage.py cron_worker run foo:bar=1将转换为{cronman_raven_cmd}-c"python manage.py cron_worker run foo:bar=1"

cron任务-从管理区域运行cron作业

一些cron作业可以请求从管理区域开始:admin>;cron>;cron任务 要将cron作业类添加到管理中的列表中,我们需要设置允许的cron任务设置:

pip install django-cronman[redis]
8

要请求给定cron作业的另一次运行,我们可以在admin中创建一个新的crontask记录。 cron jobruncrontasks由调度程序每4分钟启动一次,将为每个挂起的cron任务生成一个单独的工作进程。

更改日志

2019-04-30-1.1.1 pre-commit.com挂钩支持。文档更新 2019-03-13-1.1.0添加对cron_调度程序的cronitor ping的支持 2019-02-25-1.0.0初始版本发布

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

推荐PyPI第三方库


热门话题
默认情况下,JavaApachePOI锁定所有单元格。如何使所有单元格解锁?   java Play框架:为什么https url在使用“sbt dist”命令时不起作用?   ldap查询搜索筛选器中“&”的java意义   java构造不带警告的ImmutableSortedSet   用户界面Java GUI图形有多高效?   java在整个应用程序中使用相同的数据还是复制它?   java如何为所有打开的文档应用插入键操作   java存储setter方法的路径,以便以后可以调用它   java加载具有相同密钥的外部属性文件   Java通过inputmap跟踪击键   Java SSLSocket错误:无法从非静态上下文引用   java访问名为的文件的正确方式   java左括号打印在后缀中&右括号错误   java在循环中对齐数字列