【问题标题】:Running Django Management command in crontab在 crontab 中运行 Django 管理命令
【发布时间】:2018-11-19 11:20:19
【问题描述】:

我正在尝试运行 Django 后台任务提供的管理命令python manage.py process_tasks 来运行我的后台任务。我想将它们作为 cronjob 运行。

为此,我使用命令 sudo crontab -e 在 cron 选项卡中创建一个条目

我的 crontab 条目看起来像这样 -

*/1 * * * * . /var/www/cronjob.sh >> /var/www/crontab.log 2>&1

我在这里运行的 shell 脚本的内容是 -

#!/bin/bash
while true
do
 echo 'starting'
 sudo su ubuntu
 . /var/www/myproject/env/bin/activate
 . /var/www/myproject/.shahrukh_aliases
 python /var/www/myproject/src/manage.py process_tasks
 echo 'finished'
 sleep 2
done

但问题是我的 EC2 实例会在一段时间后崩溃,并且只有在我重新启动后才会运行。我收到以下错误

-bash: fork: Cannot allocate memory

我认为它消耗了所有内存,因此我的实例崩溃了。我不知道如何在 cron 作业中运行任务以及为什么它会消耗我的内存。我想知道如何将这项工作作为 cronjob 运行。 提前感谢您的帮助

【问题讨论】:

  • while 总是正确的,所以这个过程永远不会结束..
  • 我需要每 2 秒运行一次,这就是我使用循环的原因,在这种情况下我该怎么办?
  • 但你每分钟都开始。每一个都需要永远。 Cronjob 不是去这里的方法。如果你需要像这样运行一些后台进程,最好使用 celery 或类似的。
  • Celery 对我的用例来说太高级了,有没有其他方法可以做到这一点?

标签: django amazon-ec2 cron ubuntu-16.04


【解决方案1】:

我的问题的解决方案很简单。我仍然可以使用 crontab 来完成。我只需要为 process_tasks 命令提供一个额外的参数。

所以我必须从 crontab 运行的命令是

python manage.py process_tasks --duration 59

因为我每分钟运行一次作业,上面的命令将运行后台任务 59 秒,然后自行结束,然后由 cron 重新启动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多