django的cron管理应用程序
django-cronman的Python项目详细描述
Django Cronman
概述
django应用程序在python级别定义和管理周期性任务。
安装
您还可以使用cron remote manager来安装它,并附加依赖项。 cron作业定义受django管理配置的启发。要添加新作业,必须创建cron job.py
在应用程序中创建 cron作业类按名称注册(并引用),可以在注册时自定义: 还可以检索或注销类(例如,在测试时): 如果给定的应用程序中有一个以上的cron作业,建议创建一个包而不是单个的cron作业django cronman
可以使用pip直接从pypi安装
模块,为每个类创建一个子模块,并在包的pip install django-cronman
pip install django-cronman[redis]
定义新的cron作业
basecronjob
子类并注册它:fromcronman.jobimportBaseCronJob,cron_job_registryclassHelloWorld(BaseCronJob):"""Demo Cron Job class"""defrun(self):"""Main logic"""passcron_job_registry.register(HelloWorld)
cron_job_registry.register(HelloWorld,name='Hello')
cron_job_registry.get('HelloWorld')cron_job_registry.unregister('HelloWorld')
\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_module
为none
。例如:
# 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-cronman0
pip install django-cronman1
参数作为字符串值传递,任何类型转换都应该在run
方法中进行。
支持带空格的带引号字符串,但逗号只能用作参数分隔符:
pip install django-cronman2
在cronman.utils
模块中有用于提取列表和布尔值的实用函数。
配置cronitor支持
cron_worker
命令可以在作业启动、完成或失败时通知cron it or。
要启用此功能,您必须:
- 在设置中启用cronitor支持
- 配置cron作业类:
pip install django-cronman3
当cron作业启动时,我们可以通过设置cronitor ping_run=false
或cronitor ping_fail=false
来禁用向cronitor发送可选的"run"和"fail"ping,但这似乎不是必需的。
重要提示: 在cronitor仪表板中添加新监视器时,请使用类型heartbeat。避免使用cron job监视器,因为它们发送的误报警报"未按计划运行"。
配置锁
任务可以获取锁以防止并发调用。锁的pidfiles格式位于settings.cronman_data_dir
中。要修改给定cron作业类的锁定行为,可以设置lock_type
属性:
pip install django-cronman4
支持以下值:
无
-无锁,允许并发locktype.class
(默认)-只能同时运行给定cron作业类的一个实例(例如foo:p=1
和foo:p=2
不能同时工作)locktype.params
-只有一个类和参数的组合可以同时运行(例如foo:p=1
和foo:p=2
可以同时工作,但是禁止再次调用foo:p=1
) 由cron_worker
命令获取/释放的锁。
我们可以为几个cron作业类配置一个共享锁,以确保其中只有一个正在运行:
pip install django-cronman5
配置CPU和IO优先级
我们可以使用 我们还可以通过将 命令cron-u scheduler runworker\u cpu优先级属性将cpu优先级(
,nice
)分配给cron作业类
pip install django-cronman
6
cronman.taxonomies.io priority
中的一个值分配给worker io_priority
属性来定制io优先级(io nice
),但在大多数情况下这是不必要的,因为nice
也会更改io优先级。cron-worker resume
和cron-jobruncrontasks
将生成与分配给cron作业类的cpu和io优先级相关的工作进程。当运行cron-worker run时,这些设置不会被强制执行,因此您必须手动为这些调用预先准备好nice
/ionice
。
列出并终止正在运行的cron作业
commandcron_worker status
显示当前正在运行的cron作业-pidfile name、pid和status(alive
,dead
)。
搜索结果可以受到作业规范(cron作业名称、参数)的限制
pip install django-cronman7
commandcron_worker kill
在进程拒绝终止时优雅地(sigterm
)或强制地终止活动cron作业(sigkill
)。任务列表可以由作业规范限制
pip install django-cronman8
也可以使用pid来终止单个进程:
pip install django-cronman9
恢复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初始版本发布