【问题标题】:Cron-like scheduler, something between cron and celery类似 cron 的调度器,介于 cron 和 celery 之间
【发布时间】:2012-06-10 17:53:43
【问题描述】:

我想在我的 django 项目上运行定期任务,但我不希望在我的项目中捆绑 celery/django-celery(带有 celerybeat)的所有复杂性。

我还想将配置与时间以及在我的 SCM 中运行的命令一起存储。

我的生产机器运行的是 Ubuntu 10.04。

虽然我可以学习和使用 cron,但我觉得应该有更高级别(用户友好)的方式来做到这一点。 (很像 UFW 之于 iptables)。

有这种事吗?有什么提示/建议吗?

谢谢!

【问题讨论】:

  • sched + 多处理怎么样?或者APScheduler
  • 还有什么比使用 cron 更容易的呢?您也可以将 crontab 文件存储在版本控制系统中。
  • @brandizzi:谢谢! APScheduler 看起来很棒,我将来可能会使用它。目前,我想最简单的方法就是坚持使用 cron。
  • @Brian Neal:我会看看如何在别处存储 crontab 文件。
  • @Brian,通过 ssh 进入服务器来禁用或调整 cronjob 并不总是超级方便。理想情况下,这应该通过直观的网络界面来完成。

标签: python django cron celery


【解决方案1】:

有几个基于 Django 的调度应用程序,例如 django-chronographdjango-chronikerdjango-cron。我将 django-chronograph 分叉到 django-chroniker 以修复一些错误并将其扩展为我自己的用例。我仍然在一些项目中使用 Celery,但就像你指出的那样,它有点过于复杂并且堆栈很大。

【讨论】:

  • 谢谢,Cerin!在 github 上看了你的 repo,可能会去。
【解决方案2】:

在我个人看来,我会学习如何使用 cron。这不会超过 5 到 10 分钟,它是在 Linux 服务器上工作时必不可少的工具。

您可以做的是设置一个 cronjob,它每分钟请求 django 实例的一页,并让 django 脚本根据存储在数据库中的配置确定现在是什么时间以及需要做什么。这是我在其他类似应用程序中看到的方法。

【讨论】:

  • 我同意你的第一段,但第二段似乎非常低效。为什么不让 cron 在指定时间调用某些自定义管理命令?你甚至可以在 Django 中生成并安装 crontab 文件。
  • 是的,这是我“保持 cron 配置简单”的方法,如果您不习惯 cron,这可能会更好。从 django 中生成 crontab 也是我的首选方法,但它有点复杂(权限、接受用户输入时的安全考虑等)
  • 我真的很喜欢这个建议。我几乎不会要求每分钟请求一个视图并查询数据库效率低下......
  • @dgel,效率低下,因为您现在必须自己编写所有调度代码,而不是依赖经过彻底调试且非常灵活的解决方案(cron 守护程序)。
  • 似乎坚持使用 cron 是最好的方法。请求执行任务的视图将非常低效(在我的用例中),因为我不太确定脚本超时内的任务完成情况,并且它将持有一个进程线程,否则该线程将为实际用户提供服务。 Django 已经提供了一种非常好的方式来“离线”执行东西(django 管理命令)。
猜你喜欢
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多