我想用django Kronos比较会员模型的'end_date'和今天每1.a.m.
所以,我安装了'django-Kronos'并在已安装的应用程序中写了'Kronos'。
我在项目的根目录中创建了文件。
from staff.models import Member
from datetime import timedelta
import datetime
import kronos
import random
@kronos.register('1 * * * *')
def the_task():
today = datetime.date.today()
Member.objects.filter(end_date__lte=today).update(Membership_status=0)
为了测试,我写了python manage.py runtask the_task
但是,CommandError: Task 'the_task' not found
发生了。
我如何自动运行cron.py?
答案 0 :(得分:0)
如果您不特别依赖于使用kronos,则可以将其设置为管理命令,以便您可以从终端运行它,如:$ python manage.py the_task
。
从那里你可以从你的操作系统中将它作为cronjob运行,或者许多托管公司提供可以用来运行这样的计划任务。
要设置管理命令,请在其中一个应用程序目录中创建以下目录结构:management / commands /
命令目录中的创建一个名为the_task.py
的python文件,并对其进行编辑以包含以下代码:
from django.core.management.base import BaseCommand, CommandError
from staff.models import Member
from datetime import timedelta
import datetime
class Command(BaseCommand):
args = ''
def handle(self, *args, **options):
today = datetime.date.today()
Member.objects.filter(end_date__lte=today).update(Membership_status=0)
我发现这样做比较简单,除了标准的django之外不需要库,而且很容易测试,因为你也可以从终端运行它。
答案 1 :(得分:0)
来自django-kronos自述文件,“ Kronos从项目根目录和每个应用程序中的cron模块收集任务”。我认为您错过了这一点,即cron任务应位于项目根目录或应用程序目录中定义的cron.py文件中。这就是为什么kronos找不到任务的原因。