示例Cron与Django

时间:2017-08-04 08:14:30

标签: python django cron scheduled-tasks

我在互联网上搜集了Django中预定工作的一个工作示例。但我只能找到如何做到这一点,但没有给出任何例子。有人可以共享运行带有cron的shecudled任务的Django框架的工作示例吗?

3 个答案:

答案 0 :(得分:2)

首先创建一个custom admin command。此命令将用于将任务添加到crontab。以下是我的自定义命令的示例:

cron.py

from django.core.management.base import BaseCommand, CommandError
import os
from crontab import CronTab

class Command(BaseCommand):
    help = 'Cron testing'

    def add_arguments(self, parser):
        pass

    def handle(self, *args, **options):
        #init cron
        cron = CronTab(user='your_username')

        #add new cron job
        job = cron.new(command='python <path_to>/example.py >>/tmp/out.txt 2>&1')

        #job settings
        job.minute.every(1)

        cron.write()

之后,如果您查看下面的代码,将每隔1分钟调用一次python脚本。创建一个example.py文件,并在那里添加您希望每1分钟创建一次的功能。

所有准备添加预定作业,只需从项目django目录中调用以下命令:

python manage.py cron

要验证是否已成功添加cron作业,请调用以下命令:

crontab -l

你应该看到这样的事情:

* * * * * <path_to>/example.py

要调试example.py,只需调用此coomand:

tail -f /tmp/out.txt

答案 1 :(得分:0)

计划任务可以通过celery完成。

Celery是一个任务队列,专注于实时处理,同时也支持任务调度。

答案 2 :(得分:0)

您应该尝试在python脚本的开头添加以下代码块,该脚本使用django app的任何内容。

import sys, os, django
# append root folder of django project
# could be solved with a relative path like os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..') which corresponds to the parent folder of the actual file.
sys.path.append('/path/to/django-project/')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()

然后你应该能够在像

这样的cronjob中调用这个脚本
* * * * * user /path/to/python /path/to/script