【问题标题】:Error with Python subprocess when running Flask app using nginx + WSGI使用 nginx + WSGI 运行 Flask 应用程序时 Python 子进程出错
【发布时间】:2021-10-18 16:54:24
【问题描述】:

我已经使用 Flask 开发了一个 Python Web 服务器,并且一些端点利用 subprocess 模块来调用不同的可执行文件。在开发中,使用 Flask 调试服务器,一切正常。但是,当与 nginx+WSGI 一起运行服务器时(在完全相同的机器上),一些子进程调用会失败。

例如,我使用的工具之一是 Microsoft 的 dotnet,我从我的用户那里以 sudo apt-get install -y aspnetcore-runtime-5.0 安装它,然后从 Python 中使用 subprocess 模块调用它。当我使用python3 server.py 运行服务器时,它就像一个魅力。但是,当使用 nginx 和 WSGI 时,子进程调用失败并出现异常:/bin/sh: 1: dotnet: not found

我怀疑这是由于运行服务器的用户和组无法访问该命令。我使用this 指南作为部署应用程序的参考,在 wsgi .ini 文件中,我设置了uid = javierdgid = www-data,而在 systemd .service 文件中,我设置了User=javierdGroup=www-data .

我尝试将可执行文件的路径添加到/etc/profile,但没有成功,我不知道有什么其他方法可以修复它。我还非常惊讶地发现,某些可执行文件会发生这种情况,但并非所有可执行文件都会发生这种情况,例如 dotnet 会发生这种情况,它位于 /usr/bin/dotnet,因此每个用户都应该可以访问。关于如何解决这个问题的任何想法?此外,如果有人可以解释为什么会发生这种情况,我将非常感谢您的努力。

非常感谢!

【问题讨论】:

    标签: python nginx flask subprocess uwsgi


    【解决方案1】:

    好吧,终于在头疼之后发现了错误,真的很简单。

    在我链接的教程中,在创建系统服务文件时,包含以下行:Environment="PATH=/home/myuser/myfolder/enviroment/bin"

    当然,由于这是覆盖路径,因此无法执行命令。一旦我注意到它,我就删除了该行,重新启动服务,它就被修复了。

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 2015-11-21
      • 2017-12-25
      • 2016-01-19
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多