質問

カスタムメイドのDjangoコマンドを毎分実行するようにします。ただし、 python manage.py mycommand が完全に機能している間は、 python /path/to/project/myapp/manage.py mycommand は機能していないようです。

どうすればこれを達成できますか? / etc / crontab を以下で使用します:

****** root python /path/to/project/myapp/manage.py mycommand
役に立ちましたか?

解決

問題は、cronがスクリプトを" bare"で実行することだと思う環境のため、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は実行されません。

Djangoの生活をもっとシンプルにしたい場合は、プロジェクト内でdjango-command-extensionsを使用します:

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

" runscript"という名前のコマンドがあります。 crontab行にコマンドを追加するだけです:

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

そして、そのようなスクリプトはDjangoコンテキスト環境で実行されます。

これは私のプロジェクトの1つで最近やったことです(私は作業するすべてのプロジェクトのvenvsを維持しているので、venvsがあると仮定しています)

 ***** /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(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を使用して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