Запуск внешних(сторонних, 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 и использовать родной функционал.
Добавить комментарий