Django的自定义命令和cron(Django custom command and cron)

2019-08-31 06:41发布

我想我做的Django命令习俗每隔一分钟执行。 然而它似乎像python /path/to/project/myapp/manage.py mycommand似乎并没有同时在目录工作python manage.py mycommand完美的作品。

我怎样才能做到这一点? 我使用/etc/crontab有:

****** root python /path/to/project/myapp/manage.py mycommand

Answer 1:

我认为问题是,cron是要在一个“裸”的环境中运行脚本,所以你的DJANGO_SETTINGS_MODULE可能是不确定的。 你可能想在一个shell脚本,首先定义DJANGO_SETTINGS_MODULE包这件事

事情是这样的:

#!/bin/bash

export DJANGO_SETTINGS_MODULE=myproject.settings 
./manage.py mycommand

让它运行(chmod + X),然后设置cron来运行该脚本来代替。

编辑

我还想说,你可以通过“模块化”这个概念一点点,让这样你的脚本接受作为参数的管理命令。

#!/bin/bash

export DJANGO_SETTINGS_MODULE=myproject.settings
./manage.py ${*}

现在,您的cron作业可以简单地通过“mycommand的”,或者你想从一个cron作业运行的任何其他manage.py命令。



Answer 2:

cd /path/to/project/myapp && python manage.py mycommand

通过链接你这样的命令,蟒蛇将不会被执行,除非CD正确地更改目录。



Answer 3:

如果你希望你的Django生活带来很多更简单,使用Django的命令扩展您的项目中:

http://code.google.com/p/django-command-extensions/

你会发现一个名为“runScript中”,所以你只需将该命令添加到你的crontab行命令:

****** root python /path/to/project/myapp/manage.py runscript mycommand

而这样的脚本将与Django的上下文环境中执行。



Answer 4:

这就是我在我的项目之一最近做了,(我保持每一个项目我工作venvs,所以我assumning你有venvs)

 ***** /path/to/venvs/bin/python /path/to/app/manage.py command_name 

这非常适合我。



Answer 5:

在runScript中引伸无据可查。 与Django的命令这一个可以去任何地方在您的项目,需要一个脚本文件夹。 该.py文件需要一个run()函数。



Answer 6:

  1. 如果它是一个独立的脚本,你需要这样做:

     from django.conf import settings from django.core.management import setup_environ setup_environ(settings) #your code here which uses django code, like django model 
  2. 如果它的Django的命令,它更容易: https://coderwall.com/p/k5p6ag

    在(管理/命令/ exporter.py)

     from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): args = '' help = 'Export data to remote server' def handle(self, *args, **options): # do something here 

然后,在命令行:

$ python manage.py exporter

现在,很容易一个新的cron任务添加到Linux系统,使用crontab中:

$ crontab -e

or $ sudo crontab -e if you need root privileges

在crontab文件,例如用于运行此命令每隔15分钟,这样的事情:

# m h  dom mon dow   command
*/15 * * * * python /var/www/myapp/manage.py exporter


文章来源: Django custom command and cron