سؤال

أريد العرف جانغو الأوامر ليتم تنفيذها في كل دقيقة.ومع ذلك يبدو python /path/to/project/myapp/manage.py mycommand لا يبدو أن العمل بينما في الدليل python manage.py mycommand يعمل تماما.

كيف يمكنني تحقيق ذلك ؟ يمكنني استخدام /etc/crontab مع:

****** root python /path/to/project/myapp/manage.py mycommand
هل كانت مفيدة؟

المحلول

أعتقد أن المشكلة هي أن كرون هو الذهاب الى تشغيل البرامج النصية الخاصة بك في "العارية" البيئة ، لذلك DJANGO_SETTINGS_MODULE المرجح غير معروف.قد ترغب في التفاف هذا في شيل أول ويعرف DJANGO_SETTINGS_MODULE

شيء من هذا القبيل:

#!/bin/bash

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

لجعله قابل للتنفيذ (chmod +x) ثم قم بإعداد كرون لتشغيل البرنامج النصي بدلا من ذلك.

تحرير

أردت أيضا أن أقول لك أن "modularize" هذا المفهوم قليلا و تجعل من مثل هذا البرنامج النصي الخاص بك تقبل إدارة الأوامر كما الحجج.

#!/bin/bash

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

إن وظيفة كرون يمكن أن تمر ببساطة "mycommand" أو أي شيء آخر manage.py الأمر الذي تريد تشغيله من خلال وظيفة كرون.

نصائح أخرى

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

حسب تسلسل الأوامر الخاصة بك مثل هذا، لن يتم تنفيذ الثعبان ما لم يتغير مؤتمر نزع السلاح الدليل بشكل صحيح.

إذا كنت تريد بفك حياتك الكثير أكثر بساطة، استخدم جانغو الأوامر-ملحقات ضمن المشروع الخاص بك:

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

وستجد أمر المسمى "RUNSCRIPT" لذلك يمكنك ببساطة إضافة الأمر إلى خط كرونتاب الخاص بك:

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

وسوف مثل هذا السيناريو تنفيذ مع البيئة السياق جانغو.

وهذا ما قمت به مؤخرا في واحدة من مشاريعي، (ط الحفاظ على venvs لكل مشروع أعمل، لذلك أنا assumning لديك venvs)

<اقتباس فقرة>
 ***** /path/to/venvs/bin/python /path/to/app/manage.py command_name

وهذا يعمل تماما بالنسبة لي.

ولم يتم توثيقها جيدا تمديد RUNSCRIPT. على عكس الأمر جانغو هذا يمكن للمرء أن يذهب إلى أي مكان في المشروع ويتطلب مجلد البرامج النصية. يتطلب ملف .py وظيفة تشغيل ().

  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. إذا جانغو الأمر أسهل: https://coderwall.com/p/k5p6ag

    في (management/commands/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

الآن, فمن السهل أن إضافة جديدة مهمة كرون إلى نظام لينكس باستخدام 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top