【问题标题】:How to setup my crontab in order to execute process_tasks in Django?如何设置我的 crontab 以便在 Django 中执行 process_tasks?
【发布时间】:2019-10-15 16:47:18
【问题描述】:

我决定为我的 Django 项目使用一个名为 django-background-tasks 的库(文档链接:https://django-background-tasks.readthedocs.io/en/latest/)。我想将我的 Django 应用程序部署到 Linux 服务器(Ubuntu 19.0.4)。我应该如何编写 crontab 以便每五秒调用一次命令“process_tasks”?

这里Running a cron every 30 seconds 是实现秒部分的解决方法,但由于我对这部分工作(部署和自动化流程)不熟悉,我应该如何创建我的 crontab 文件以实现我想要的目的?

我将 process_tasks 用于许多不同的功能,例如:晚上做一些分析,早上发送结果,过期一些代码等。所以基本上我需要几乎不断地运行它。

提前感谢您的任何建议,如果您需要更多建议,我很乐意为您提供。

【问题讨论】:

  • Cron 只允许至少一分钟。您可以使用OnCalendar=*:0/5 指令配置systemd timer 作为替代方案。

标签: django python-3.x cron


【解决方案1】:

既然您知道cron 只允许至少一分钟,但您希望每 5 秒运行一次

如何编写一个shell 脚本(通过supervisor 作为服务运行)以无限循环运行您的任务。此脚本将在每次运行 5 秒后休眠。

servicecron 之间的唯一区别是: 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

您可以使用supervisor 配置文件process_django_tasks.sh(此文件包含上述代码)作为服务,以便它在启动时运行,并且您可以使用快速命令控制startstop

要快速测试,您可以轻松运行sh process_django_tasks.sh

如果您能告诉我们您希望脚本每 5 秒运行一次的确切原因。也许我们都建议比每 5 秒运行一次脚本更好的方法。

【讨论】:

  • 我将 process_tasks 用于许多不同的功能,例如:晚上做一些分析,早上发送结果,过期一些代码,在执行一些视图后发送电子邮件,以便用户不要'不必等到电子邮件发送后才能收到回复等。所以基本上我需要几乎不断地运行它。
【解决方案2】:

我建议使用 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 秒运行一次特定任务。

【讨论】:

  • 嗨,我使用 process_tasks 作为在我的项目中运行计划调用的一种方式,所以我不想每 5 秒运行一次,但我需要在为了不断检查是否有我想稍后执行的新进程。
  • 好的,所以您需要将process_tasks 作为一个连续进程启动,默认情况下,它会每 5 秒自动检查一次是否有需要运行的任务。
【解决方案3】:

不知道任何细节,这可能是一个完全不适用的替代方案。但是,如果保证在保存(a)个特定模型的(一个)实例之前不会做任何事情,并且假设此保存不会太频繁地发生,那么您可能会查看 Django post_save 信号。每当发生该保存时,要么执行任务,要么执行任务(如果它在最后 5 秒内尚未运行)。

【讨论】:

  • 我明白了,问题是我将 process_tasks 用于许多不同的功能,例如:晚上做一些分析,早上发送结果,过期一些代码等等。所以基本上我'将需要几乎不断地运行它。
猜你喜欢
  • 2013-09-13
  • 2010-09-05
  • 2019-08-05
  • 1970-01-01
  • 2014-07-18
  • 2017-10-08
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多