カスタムメイドのDjangoコマンドを毎分実行したい。ただし、ディレクトリで完全に機能python /path/to/project/myapp/manage.py mycommand
している間は機能しないようです。python manage.py mycommand
どうすればこれを達成できますか?私は一緒に使用/etc/crontab
します:
****** root python /path/to/project/myapp/manage.py mycommand
カスタムメイドの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は実行されません。
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つで行ったことです(私は作業するすべてのプロジェクトに対してvenvを維持しているので、あなたがvenvを持っていると仮定しています)
***** /path/to/venvs/bin/python /path/to/app/manage.py command_name
これは私にとって完璧に機能しました。
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)
runscript拡張機能は十分に文書化されていませんでした。djangoコマンドとは異なり、これはプロジェクトのどこにでも移動でき、scriptsフォルダーが必要です。.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
(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