Как настроить мой crontab для выполнения process_tasks в Django? - PullRequest
1 голос

Я решил использовать библиотеку для моего проекта Django под названием django-background-tasks (ссылка на документацию: https://django -background-tasks.readthedocs.io / en / latest / ).Я хочу развернуть свое приложение Django на сервере Linux (Ubuntu 19.0.4).Как мне написать crontab для вызова команды "process_tasks" каждые пять секунд?

Здесь Запуск cron каждые 30 секунд - это обходной путь для достижения части секунды, но так как яя новичок в этой части работы (развертывание и автоматизация процесса), как мне создать файл crontab для достижения желаемой цели?

Я буду использовать process_tasks для множества различных функций, таких как: проводить анализ ночью и отправлять результаты утром, истекать некоторые коды и т. Д. Поэтому в основном мне нужно будет запускать его почти постоянно.

Заранее благодарю за любое предложение, если вам нужно что-то еще, я был бы рад предоставить его вам.

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Я бы порекомендовал использовать Supervisor (http://supervisord.org) для запуска python manage.py process_tasks), который затем будет отслеживать задачи, которые вы запланировали в своем коде, и запускать их на основе их повторного синтаксиса:

Для запуска задания каждые 5 секунд:

function_to_call(var, repeat=5, repeat_until=None)

Я бы также порекомендовал Supervisor запустить весь проект Django.

При просмотре документации команда process_tasks по умолчанию запускается каждые 5 секунд, проверяя наличие новых задач для запуска. Не уверен, что вы просто хотите проверять каждые 5 секунд или запускать определенную задачу каждые 5 секунд.

0 голосов
/ 30 мая 2019

Не зная каких-либо подробностей, это может быть совершенно неприменимой альтернативой.Однако, если есть гарантия, что ничего не будет сделано до тех пор, пока не будет сохранен экземпляр (ы) конкретной (ых) модели (и при условии, что это сохранение происходит не слишком часто, то вывместо этого можно посмотреть сигналы Django post_save.Всякий раз, когда происходит это сохранение, либо выполняйте задачу, либо выполняйте задачу, если она не выполнялась уже в последние пять секунд.

0 голосов
/ 30 мая 2019

Так как вы знаете, cron позволяет использовать не менее одной минуты, но вы хотите запустить его каждые 5 секунд .

как насчет написания сценария оболочки (запущенного как служба через supervisor), который запускает вашу задачу в бесконечном цикле .Этот скрипт будет спать после каждого запуска в течение 5 секунд.

Единственная разница между service и cron заключается в следующем: cron будет разветвлять процесс при каждом запуске, запускать процесс и периодически проверять, завершено ли задание.чтобы очистить его, и этот скрипт (как сервис) не будет работать как cron, но я думаю, что он выполнит работу.

#!/bin/bash
while true; do
    # your code here, 
    # call your python file which initializes 
    # django variables (or whatever you want) and do the needful.
    sleep 5;
done

Вы можете настроить файл process_django_tasks.sh (этот файл содержит приведенный выше код) с supervisor в качестве службы, поэтому он запускается во время загрузки, и вы можете управлять start и stop с помощью быстрых команд.

Для быстрого тестирования вы можете легко запустить sh process_django_tasks.sh

Если бы вы могли сказать нам, почему именно вы хотите, чтобы ваш скрипт запускался каждые 5 секунд.Может быть, мы все предлагаем лучший способ, чем запускать скрипт каждые 5 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...