如何在单行中执行多个命令 linux (openshift / docker )

How to execute mulitple commands in single line linux (openshift / docker )

我正在寻找一种在单行中 运行 django 服务器和 celery 的方法。服务(django 和 celery)作为两个单独的 pods 部署在 openshift 中,具有相同的图像,目前我正在 运行ning django 服务(pod)使用 python manage.py runserver 和 celery(pod)使用celery -A myapp worker --loglevel=info --concurrency=8

而不是 运行 为每个单独 pods,我想一起执行 运行 服务器命令和 celery worker 命令。怎么做。

我知道&& ; || 用于此类场景。但这些不起作用。

例如:

cd ./app && python manage.py runserver  #this works

cd ./app && python manage.py runserver && celery -A myapp worker --loglevel=info --concurrency=8
#this will cd to app, execute runserver command. but celery command doesn't get executed.

创建一个 bash 文件并在其中添加如下两个命令:

python manage.py runserver &
celery -A myapp worker --loglevel=info --concurrency=8

使用“chmod +x”使其可执行

和 运行 它在你的 docker 容器中 bashmy_file.sh

&& 连接两个命令,这意味着以下命令将 运行 在第一个命令完成后执行,具体取决于它的退出代码。

这是一个合乎逻辑的 and -- 因此,如果第一个命令 returns 为假,则第二个命令不会 运行(因为逻辑 and 已知为假)。

试试这个:

cd /路径; ( python manage.py 运行 服务器 &); ( celery -A myapp worker --loglevel=info --concurrency=8 &);

最后的 & 也将芹菜放在背景中。如果你想在前景中使用芹菜,请将其删除。如上所述,这不是一种“容器原生”设计——如果每个容器有一个进程,其余的管理就会变得更加直接。通常值得找出所需的其余调整(例如 emptyDir{} 可用于在 pod 内的容器之间共享文件)并尽早简化部署。