문제

맞춤 제작된 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 () 함수가 필요합니다.

  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

    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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top