簡體   English   中英

如何在一個命令中運行 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

這種方法的缺點 - 即使在django 開發服務器關閉后, rediscelery仍將在后台工作。 所以你需要終止這些進程。 有關如何執行此操作的示例,請參閱此 unix se 答案

因此,您可以創建 2 個 bash 腳本start.sh (包含帶有&命令)和cleanup.sh (終止進程)並分別運行它們。

生產見目的#2

  1. 使用systemdsupervisor 您需要為守護進程創建 conf 文件,然后運行它們。

根據Yevhenii M.回答,您可以啟動一個帶有trap的子 shell 命令,當您按下Ctrl + C時,可以終止該子shell 中的所有正在運行的進程:

(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 的 README)

為此,您創建一個Procfile (項目根目錄中的文件),您可以在其中指定要運行的命令:

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

然后運行foreman start

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM