17

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

どうすればこれを達成できますか?私は一緒に使用/etc/crontabします:

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

7 に答える 7

22

問題は、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コマンドを渡すだけで済みます。

于 2009-10-21T14:32:01.490 に答える
13
cd /path/to/project/myapp && python manage.py mycommand

このようにコマンドを連鎖させることにより、cdがディレクトリを正しく変更しない限り、Pythonは実行されません。

于 2010-04-11T00:30:51.723 に答える
9

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コンテキスト環境で実行されます。

于 2009-10-21T14:50:38.637 に答える
2

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

 ***** /path/to/venvs/bin/python /path/to/app/manage.py command_name

これは私にとって完璧に機能しました。

于 2013-06-18T10:54:16.980 に答える
1

AWS EC-2インスタンスでDjangoカスタムコマンドをスケジュールする方法は?

ステップ1

First, you need to write a .cron file

ステップ2

Write your script in .cron file.

MyScript.cron

* * * * * /home/ubuntu/kuzo1/venv/bin/python3 /home/ubuntu/Myproject/manage.py transfer_funds >> /home/ubuntu/Myproject/cron.log 2>&1

ここで、* * * * *は、スクリプトが毎分実行されることを意味します。必要に応じて変更できます(https://crontab.guru/#*_*_*_*_*)。ここで、/ home / ubuntu / kuzo1 / venv / bin/python3はPython仮想環境パスです。/home/ubuntu/kuzo1/manage.py transfer_fundsはDjangoカスタムコマンドパスです。/home/ubuntu/kuzo1/cron.log2>&1は、実行中のcronログを確認できるログファイルです。

ステップ-3

このスクリプトを実行する

$ crontab MyScript.cron

ステップ-4

いくつかの便利なコマンド

1. $ crontab -l (Check current running cron job)
2. $ crontab -r (Remove cron job)
于 2021-07-07T10:27:09.710 に答える
0

runscript拡張機能は十分に文書化されていませんでした。djangoコマンドとは異なり、これはプロジェクトのどこにでも移動でき、scriptsフォルダーが必要です。.pyファイルにはrun()関数が必要です。

于 2010-04-11T00:23:05.627 に答える
0
  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

    (management / messages / 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
于 2014-08-15T19:01:07.283 に答える