如何无冲突地为多个Django应用添加Cron任务至Crontab
两个Django应用使用django_crontab添加定时任务冲突问题
应用结构
- 应用1
/path/to/app1/ ├── manage.py ├── app1/ │ ├── settings.py │ └── ...
- 应用2
/path/to/app2/ ├── manage.py ├── app2/ │ ├── settings.py │ └── ...
定时任务配置
每个应用的settings.py中定义了独立的定时任务:
- app1/settings.py
CRONJOBS = [ ('*/10 * * * *', 'app1.cron.my_scheduled_task'), ]
- app2/settings.py
CRONJOBS = [ ('*/15 * * * *', 'app2.cron.another_scheduled_task'), ]
操作步骤与错误
执行以下命令添加定时任务:
cd /path/to/app1 source /path/to/venv/bin/activate python manage.py crontab add cd /path/to/app2 source /path/to/venv/bin/activate python manage.py crontab add
为第二个应用执行python manage.py crontab add时,出现错误:
RuntimeError: No job with hash 65f37180992aa5435pidg617281f3e6 found. It seems the crontab is out of sync with your settings.CRONJOBS. Run "python manage.py crontab add" again to resolve this issue!
该哈希ID对应第一个应用的任务。
已尝试的操作
- 确保每个应用使用独立的虚拟环境
- 在各自应用目录下执行
python manage.py crontab add
期望结果
将两个应用的Cron任务无冲突地添加到Crontab中。
解决方案
问题根源是django_crontab默认使用相同的注释标记管理所有任务,导致两个应用的任务互相干扰。只需为每个应用配置唯一的任务标识即可解决:
在每个应用的
settings.py中添加独立的注释标记:- app1/settings.py
CRONTAB_COMMENT = 'django-crontab-app1'- app2/settings.py
CRONTAB_COMMENT = 'django-crontab-app2'清理原有冲突任务:
分别进入两个应用的虚拟环境,执行:python manage.py crontab remove重新添加定时任务:
再次为每个应用执行添加命令:cd /path/to/app1 source /path/to/venv/bin/activate python manage.py crontab add cd /path/to/app2 source /path/to/venv/bin/activate python manage.py crontab add
这样两个应用的定时任务会通过独立的注释标记被管理,不会再出现同步冲突。
内容的提问来源于stack exchange,提问作者Nithin cp
相关产品推荐
相关产品推荐

