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

How to run django's "python manage.py runserver" , celery's "celery -A app_name worker -l info" and redis-server in one command

我最近开始使用 django。我开始做一个小项目。我一直在使用 celery 和 redis worker。每次使用 celery 和 redis 我都必须 运行 celery 和 redis 服务器,然后是 django 服务器。这是一个有点冗长的过程。 我有两个问题。 1. 每次 运行 连接服务器我做的是正确的事还是有其他正确的方法来完成这个过程? 2. 如果我的方向正确,有什么方法可以做到这一点吗?

我试过circus.ini,但没用。

如果您使用UNIX系统:

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

这种方法的缺点 - rediscelery 即使在 django dev 关闭后也会在后台运行服务器。所以你需要终止这些进程。有关如何执行此操作的示例,请参阅 this unix se answer

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

生产参见用途#2

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

Yevhenii M.'s 的基础上,您可以启动带有 trap 的 subshell 命令来杀死该 subshell 中的所有 运行ning 进程你按下 Ctrl+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 管理器,但这需要安装额外的 dependencies/programs。类似 foreman 或其他语言的端口之一:

(来源:工头的自述文件)

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

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

然后运行foreman start