Как выполнить команду в точное время раз в день в Django?

Я работаю над веб-проектом Django, в котором мне нужно создать приложение, которое работает в следующей последовательности:

1) пользователь открывает страницу, в которой ему нужно ввести command и time

2) Приложение Django будет выполнять эту команду в заданное время в каждый день, пока пользователь не покинет планировщик (по умолчанию он равен True)

Проблема в том, что:

1) Как выполнять команды за раз, но каждый день. Чтобы сохранить команды и время, я создал в модели models.py следующую модель

 class commands(models.Model): username = models.ForeignKey(User) command = models.CharField(max_length=30) execution_time = models.DateField() 

У меня есть то же время, но я не получаю правильный способ выполнить его в каждый день в указанное время

и возможно ли это сделать с библиотекой pytz ?

Для выполнения команд я использую библиотеку paramiko

PS: Я не хочу использовать внешнюю библиотеку

3 Solutions collect form web for “Как выполнить команду в точное время раз в день в Django?”

Хотя вы могли бы добавить приложение django и удалить задания cron в системе, еще один подход django-ish – использовать Celery . Это система очереди задач, которая может запускать как синхронные, так и асинхронные задачи.

Одной из характерных черт сельдерея является выполнение запланированных задач: http://packages.python.org/celery/userguide/periodic-tasks.html

 from datetime import timedelta CELERYBEAT_SCHEDULE = { "runs-every-30-seconds": { "task": "tasks.add", "schedule": timedelta(seconds=30), "args": (16, 16) }, } 

Они также имеют более детальную версию задачи периода, которая реплицирует планирование crontab:

 from celery.schedules import crontab CELERYBEAT_SCHEDULE = { # Executes every Monday morning at 7:30 AM 'every-monday-morning': { 'task': 'tasks.add', 'schedule': crontab(hour=7, minute=30, day_of_week=1), 'args': (16, 16), }, } 

Сельдерей сам по себе является автономным, но существует конкретная проверка джанго -сельдерея

Преимущество этого решения заключается в том, что вам не нужно редактировать и поддерживать вкладку cron на системном уровне. Это решение, которое высоко интегрировано в django для этого точного использования.

Также огромная победа над использованием cron заключается в том, что сельдерей может масштабироваться с вашей системой. Если вы использовали базовую систему crontab, тогда задачи будут расположены на сервере, на котором размещается приложение. Но что, если вам нужно развернуть свой сайт и запустить его на 5 веб-узлах? Вам нужно будет централизовать этот кронтаб. Если вы используете сельдерей, у вас есть большое количество возможностей для транспортировки и хранения заданий. Он по сути распространен и доступен для синхронизации со всеми серверами приложений. Он переносимый.

Мне кажется, что правильный способ сделать это – написать пользовательскую команду Django и выполнить ее через cron. Но вам, кажется, не повезло, так как другие ощутили подобную потребность и написали пользовательские приложения django. Например, возьмите django-cron .

Решение вашей проблемы – стандартное приложение cron (планирование задач на системах * nix). Вы можете запланировать скрипт с помощью cron (добавив его в crontab).

Если ваш скрипт должен выполнить в вашей прикладной среде Django, можно сказать ему, что это нужно сделать с setup_environment функции setup_environment . Подробнее об автономных скриптах для приложений Django вы можете прочитать здесь .

Python - лучший язык программирования в мире.