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