جانغو مخصص قيادة كرون
-
05-07-2019 - |
سؤال
أريد العرف جانغو الأوامر ليتم تنفيذها في كل دقيقة.ومع ذلك يبدو 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 وظيفة تشغيل ().
إذا كان مستقل النصي ، تحتاج إلى القيام بذلك:
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
إذا جانغو الأمر أسهل: 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