我一直在使用 Django 开发一个网络应用程序,我很好奇是否有办法安排作业定期运行。
基本上我只想通过数据库运行并自动定期进行一些计算/更新,但我似乎找不到任何关于这样做的文档。
有谁知道如何设置这个?
澄清一下:我知道我可以设置一个cron工作来做到这一点,但我很好奇 Django 中是否有一些特性可以提供这个功能。我希望人们能够自己部署这个应用程序,而不必做太多配置(最好是零)。
cron
我已经考虑通过简单地检查自上次将请求发送到站点以来是否应该运行作业来“追溯”触发这些操作,但我希望有一些更清洁的东西。
我采用的一种解决方案是这样做:
1)创建自定义管理命令,例如
python manage.py my_cool_command
2)使用cron(在 Linux 上)或at(在 Windows 上)在需要的时间运行我的命令。
at
这是一个简单的解决方案,不需要安装繁重的 AMQP 堆栈。但是,使用其他答案中提到的芹菜之类的东西有很多好处。特别是,使用 Celery 时,不必将应用程序逻辑分散到 crontab 文件中是一件好事。但是,cron 解决方案非常适合中小型应用程序,并且您不希望有很多外部依赖项。
编辑:
在更高版本的 Windows 中at,Windows 8、Server 2012 及更高版本已弃用该命令。您可以schtasks.exe用于相同的用途。
schtasks.exe
* 更新 * 这是 django doc 的新链接,用于编写自定义管理命令