如何在一个命令中运行django的“ python manage.py runserver”,celery的“ celery -A app_name worker -l info”和redis-server

时间:2019-12-19 21:54:53

标签: python django redis django-celery circusd

我最近开始使用django。我开始做一个小项目。我一直在用芹菜和Redis工人。每次使用celery和redis我都必须先运行celery和redis服务器,然后再运行django服务器。这是一个漫长的过程。 我有两个问题。 1.我是否通过每次运行服务器来做正确的事情,或者此过程还有其他正确的方法吗? 2.如果我的方向正确,是否有任何方法可以做到这一点?

我尝试了circus.ini,但没有用。

2 个答案:

答案 0 :(得分:1)

如果使用UNIX系统:

  1. 为此,您可以与 bash 相处。只需在后台运行 celery redis -使用&命令即可​​。
redis-server & celery -A app_name worker -l info & python manage.py runserver

这种方法的缺点-即使关闭 django开发服务器 redis celery 也将在后台运行。因此,您需要终止此过程。有关如何操作的示例,请参见this unix se answer

因此,您可以创建2个bash脚本start.sh(包含带有&的命令)和cleanup.sh(终止进程)并分别运行它们。

关于生产,请参见目的2

  1. 使用 systemd supervisor 。您需要为守护程序创建conf文件,然后运行它们。

答案 1 :(得分:0)

基于 Yevhenii M.answer,您可以启动带有 trap 的子 shell 命令,当您按下 Ctrl 时,可以终止该子 shell 中的所有正在运行的进程+C

(trap "kill 0" SIGINT; redis-server & celery -A app_name worker -l info & python manage.py runserver)

或者作为更易读的多行​​命令:

(
    trap "kill 0" SIGINT
    redis-server & 
    celery -A app_name worker -l info &
    python manage.py runserver
)

另一种选择是使用 Procfile 管理器,但这需要安装额外的依赖项/程序。类似 foreman 或其他语言的端口之一:

(来源:foreman 的 README)

为此,您创建一个 Procfile(项目根目录中的文件),您可以在其中指定要运行的命令:

redis:  redis-server
worker: celery -A app_name worker
web:    python manage.py runserver

然后运行foreman start