【问题标题】:Rather than using crontab, can Django execute something automatically at a predefined timeDjango 可以在预定义的时间自动执行某事,而不是使用 crontab
【发布时间】:2010-11-18 17:13:59
【问题描述】:

如何让 Django 在特定时间自动执行某事?

例如,我的 django 应用程序必须在预先定义的时间通过 ftp 上传到远程服务器。 ftp 服务器地址、用户名、密码、时间、日期和频率已在 django 模型中定义。

我想根据模型中存储的值自动运行文件上传。

一种方法是编写一个 python 脚本并将其添加到 crontab。该脚本每分钟运行一次,并密切关注模型中定义的时间值。

我能粗略想到的其他事情可能是 django 信号。我不确定他们是否能处理这个问题。有没有办法在预定义的时间生成信号(尚未深入了解它们)。

【问题讨论】:

  • 为什么不使用 crontab?这正是它的用途,而且非常擅长。
  • 我能想到的一个原因是用户可轻松配置周期,无需将用户在 UI 中定义的内容转换为 crontab 行,也无需在 Windows 上运行 Django 应用程序。
  • 就是这个原因。我想给后端管理员(包括非技术人员)一个基于表单的配置。

标签: django tabs cron signals


【解决方案1】:

仅作记录 - 还有celery 允许安排消息以供将来发送。然而,它与 cron 不同,因为它需要/使用 RabbitMQ 并且适用于消息队列。

【讨论】:

    【解决方案2】:

    我最近一直在考虑这个问题,发现django-cron 似乎可以满足您的需求。

    编辑:另外,如果您不是专门寻找基于 Django 的解决方案,我最近使用了scheduler.py,这是一个运行良好且易于使用的小型单文件脚本。

    【讨论】:

      【解决方案3】:

      我对@9​​87654321@ 的体验非常好。

      您需要设置一个 crontab 任务:调用 chronograph python 管理命令,然后根据管理员可调整的计划运行其他自定义管理命令

      【讨论】:

        【解决方案4】:

        您描述的问题最好使用 cron 解决,而不是直接使用 Django。由于您似乎需要将有关 ftp 上传的数据存储在数据库中(使用 Django 访问它以获取日志或图形或其他内容),您可以制作一个使用 Django 的 python 脚本,该脚本通过 cron 运行。

        James Bennett 写了一篇关于如何做到这一点的精彩文章,您可以在此处阅读全文:http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/

        它的主要要点是,您可以编写独立的 django 脚本,让 cron 可以定期启动和运行,这些脚本可以充分利用您的 Django 数据库、模型以及他们想要的任何其他东西。这使您可以灵活地运行所需的任何代码并填充数据库,而不是试图让 Django 做一些它不应该做的事情(Django 是一个 Web 框架,并且是事件驱动的,而不是时间驱动的)。

        祝你好运!

        【讨论】:

          猜你喜欢
          • 2020-11-11
          • 2019-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-17
          • 1970-01-01
          相关资源
          最近更新 更多