我必须按计划执行任务,为此我使用django_cron。设置:
INSTALLED_APPS = [
'mailsnake',
'corsheaders',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Avaana_web',
'rest_framework',
'rest_framework.authtoken',
'django_cron',
]
和cron.py
from django_cron import CronJobBase, Schedule,cronScheduler
import datetime,os
class MyCronJob(CronJobBase):
RUN_EVERY_MINS = .3
RETRY_AFTER_FAILURE_MINS = 5
ALLOW_PARALLEL_RUNS = True
schedule = Schedule(run_every_mins=RUN_EVERY_MINS,
retry_after_failure_mins=RETRY_AFTER_FAILURE_MINS)
code = 'my_app.my_cron_job'
def do(self):
print("hello")
但是当我运行
$ python manage.py runcrons
hello
只显示一次输出并结束。
如何在每30秒后得到输出
以下几点:
。看起来您的cron作业没有正确配置。根据doc,您需要在您的设置路径中创建一个CRON_CLASSES列表,指向您的cron类的完全限定包名,如下所示:
CRON_CLASSES = [
"my_app.cron.MyCronJob",
# ...
]
b。此外,通过python manage运行它并不意味着它将继续运行多次。您可能仍然需要从cron作业中运行'python manage.py runcrons'。当您调用manage.py runcrons时,您的调度将仅仅决定它是否需要运行。查看更多详细信息:http://django-cron.readthedocs.io/en/latest/installation.html