Запуск внешних(сторонних, cron) скриптов в django
При разработке проекта на Django бывают случаи, когда нужно сделать запуск скрипта не через веб интерфейс, например из консоли или добавить скрипт в cron. Но при этом хотелось бы оставить весь функционал и особенности фреймворка, такие как ORM или работа с моделями.
Для этого нам нужно две вещи: запуск скрипта в определенном виртуальном окружении, в том окружении с которым работает Django и сам импорт Django-проекта и настроек в наш скрипт.
Что бы запустить скрипт cron.py в опрделенном окружении, нужно просто указать путь к локальной версии Python(/var/www/django/env/bin/python3) в котором устанавливалась Django. Это можно добавить в crontab для запуска скрипта по расписанию:
/var/www/django/env/bin/python3 cron.py
В самом скрипте cron.py указываем путь к Django-проекту(/var/www/django/project/project) и импортируем настройки(project.settings)
import os
import django
def execute_command():
from myproject.models import MyModel
try:
print('Run shell script')
except Exception as e:
print(e)
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
django.setup()
execute_command()
Далее в этом скрипте можно подключать модули Django и использовать родной функционал.
Добавить комментарий