Django 사용자 정의 명령 및 cron
-
05-07-2019 - |
문제
맞춤 제작된 Django 명령이 매분 실행되기를 원합니다.그러나 그것은 다음과 같습니다 python /path/to/project/myapp/manage.py mycommand
디렉토리에 있는 동안에는 작동하지 않는 것 같습니다. python manage.py mycommand
완벽하게 작동합니다.
어떻게 이를 달성할 수 있습니까?나는 사용한다 /etc/crontab
와 함께:
****** root python /path/to/project/myapp/manage.py mycommand
해결책
문제는 cron이 "기본" 환경에서 스크립트를 실행하므로 DJANGO_SETTINGS_MODULE이 정의되지 않았을 가능성이 높다는 것입니다.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 명령을 간단히 전달할 수 있습니다.
다른 팁
cd /path/to/project/myapp && python manage.py mycommand
CD가 디렉토리를 올바르게 변경하지 않는 한 Python은 이와 같은 명령을 연쇄함으로써 Python이 실행되지 않습니다.
Django Life를 훨씬 더 간단하게 원한다면 프로젝트에서 Django-Command-Extensions를 사용하십시오.
http://code.google.com/p/django-command-extensions/
"runscript"라는 명령을 찾을 수 있으므로 Crontab 라인에 명령을 추가합니다.
****** root python /path/to/project/myapp/manage.py runscript mycommand
그러한 대본은 Django 컨텍스트 환경에서 실행됩니다.
이것이 제가 최근에 내 프로젝트 중 하나에서 한 일입니다.
***** /path/to/venvs/bin/python /path/to/app/manage.py command_name
이것은 나를 위해 완벽하게 작동했습니다.
runscript 확장자는 잘 문서화되지 않았습니다. Django 명령과 달리이 프로젝트는 프로젝트의 어느 곳에서나 갈 수 있으며 스크립트 폴더가 필요합니다. .py 파일에는 run () 함수가 필요합니다.
독립형 스크립트 인 경우 다음을 수행해야합니다.
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
in (관리/명령/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을 사용하여 Linux 시스템에 새로운 CRON 작업을 추가하는 것은 쉽습니다.
$ 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