【问题标题】:Running python scripts from .sh file not working从.sh文件运行python脚本不起作用
【发布时间】:2020-06-22 18:42:45
【问题描述】:

我有以下 shell 脚本 script.sh。 run_api (Rest api) 和 run_scheduler 都在同一路径。 run_api 端点工作正常,但 run_scheduler.py 没有执行。

#!/bin/bash
exec gunicorn --reload --bind 0.0.0.0:5000 run_api:application
python run_scheduler.py

以下是镜像的 docker 文件。

FROM python:3.8
WORKDIR /app
COPY . /app
RUN chmod +x script.sh
CMD ["sh", "script.sh"]

并且 以下是 docker run commond

docker run -itd --name test  -p 8080:5000 image:latest

【问题讨论】:

  • 你遇到了什么错误?
  • 没有错误,它不会执行.. 如果我评论 exec gunicorn --reload --bind 0.0.0.0:5000 run_api:application 然后我得到错误':[Errno 2] 没有这样的文件或目录.py。而且我的代码中没有这样的模块。
  • 通常,如果您需要两个独立的进程(一个 Web 服务器和一个调度程序),最好在两个独立的容器中运行它们。您可以使用相同的映像,但在映像名称后提供替代命令(覆盖 Dockerfile CMD)。你试过这个吗?
  • 您的环境设置似乎有问题...
  • 如果我在单独的容器中运行,两者都可以正常工作。即使我只运行exec gunicorn --reload --bind 0.0.0.0:5000 run_api:application 然后登录到正在运行的容器,并且运行python run_scheduler.py 它运行良好。当两者都在一个容器中时,问题就来了。我有点困惑为什么这是不可能的。

标签: python docker shell gunicorn


【解决方案1】:

gunicorn 作为阻塞进程在前台运行,因此它不会让您的 shell 脚本进入下一行。

只需在末尾添加一个&,它应该将其作为后台进程运行,如

#!/bin/bash
exec gunicorn --reload --bind 0.0.0.0:5000 run_api:application &
python run_scheduler.py

【讨论】:

  • 成功了吗?如果是这样,请考虑将答案标记为接受任何将来发现此问题的人。
  • getting error : "not found2: script.sh: ': [Errno 2] No such file or directory.py " 我认为它是为python run_scheduler.py 而来的。不确定,如果我删除此语句,容器运行正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2018-02-15
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 2013-09-18
相关资源
最近更新 更多