如何通过cron job运行Django管理命令

10
我正在使用一个名为django-mailbox的Django应用程序。它的目的是通过POP3和其他协议导入电子邮件消息并将其存储在数据库中。我想通过定期运行cron来实现这一点。文档http://django-mailbox.readthedocs.org/en/latest/topics/polling.html中指出:

使用cron作业

您可以通过运行命名为getmail的管理命令(可选地附带要获取邮件的邮箱名称的参数)轻松消费传入邮件:

python manage.py getmail

现在我可以在本地的命令行中运行它并且它有效,但是如果将其部署到一个只能通过URL访问的外部服务器上,该命令如何被执行?

1
您可以为此安排一个cron作业:http://zh.wikipedia.org/wiki/Cron - Simeon Visser
由于您成功将项目部署到外部服务器,因此可以通过ssh连接到该服务器,在ssh中运行crontab以设置cron作业。最好为此目的创建一个bash脚本,因为您需要设置环境并从正确的文件夹运行命令。 - alko
2个回答

22

如果您正在使用虚拟环境,请使用来自虚拟环境的Python二进制文件。

* * * * * /path/to/virtualenv/bin/python /path/to/project/manage.py management_command

3

在服务器机器上:

$ sudo crontab -l
no crontab for root
$ sudo crontab -e
no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]:    

请选择您喜欢的编辑器,然后查看http://en.wikipedia.org/wiki/Cron 以了解如何安排命令运行时间,并将其定向到您机器上的某个.sh文件中。请确保提供完整路径,因为此操作将在root用户上下文中运行。cron将运行的脚本可能看起来像这样:
#!/bin/bash
cd /absolute/path/to/django/project
/usr/bin/python ./manage.py getmail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接