我想讓我的自定義Django命令每分鐘執行一次。但看起來好像python /path/to/project/myapp/manage.py mycommand
似乎不工作,而在目錄python manage.py mycommand
完美的作品。Django自定義命令和cron
我該如何做到這一點?我用/etc/crontab
有:
****** root python /path/to/project/myapp/manage.py mycommand
我想讓我的自定義Django命令每分鐘執行一次。但看起來好像python /path/to/project/myapp/manage.py mycommand
似乎不工作,而在目錄python manage.py mycommand
完美的作品。Django自定義命令和cron
我該如何做到這一點?我用/etc/crontab
有:
****** root python /path/to/project/myapp/manage.py mycommand
我認爲問題是,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命令。
如果你希望你的項目中你的Django生活帶來很多更簡單,使用Django的命令擴展:
http://code.google.com/p/django-command-extensions/
你會發現一個命令名爲「runScript中」,所以你只需添加命令到您的crontab行:
****** root python /path/to/project/myapp/manage.py runscript mycommand
而這樣的腳本將與Django上下文環境一起執行。
腳本擴展沒有很好的記錄。與django命令不同的是,這個命令可以在你項目中的任何地方使用,並且需要一個腳本文件夾.py文件需要run()函數。
cd /path/to/project/myapp && python manage.py mycommand
通過像這樣鏈接你的命令,python將不會被執行,除非cd正確地更改目錄。
這是對我來說最簡單的方法,它運行良好。謝謝大衛! – thomallen 2011-04-06 23:55:21
,這對我不起作用(在我的郵件中仍然有一個名爲django.core.management的No模塊錯誤) – 2012-04-30 15:32:06
這就是我在我的項目之一最近完成的,(我保持每一個項目我工作venvs,所以我assumning你有venvs)
***** /path/to/venvs/bin/python /path/to/app/manage.py command_name
這完美地工作了我。
如果其獨立的腳本,你需要這樣做:
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
如果它的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
這是說,當我做到這一點未知命令。我必須將其更改爲: cd/path/to/project ./manage.py $ {*} – mhost 2010-02-21 19:27:11
沒有成功。自定義命令被識別,但命令顯然無法找到數據庫 – Raphael 2011-09-15 18:57:34
你是什麼意思的「命令顯然無法找到數據庫」?這是否會造成某種錯誤? – 2011-09-16 19:48:08