【发布时间】: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 = javierd 和gid = www-data,而在 systemd .service 文件中,我设置了User=javierd、Group=www-data .
我尝试将可执行文件的路径添加到/etc/profile,但没有成功,我不知道有什么其他方法可以修复它。我还非常惊讶地发现,某些可执行文件会发生这种情况,但并非所有可执行文件都会发生这种情况,例如 dotnet 会发生这种情况,它位于 /usr/bin/dotnet,因此每个用户都应该可以访问。关于如何解决这个问题的任何想法?此外,如果有人可以解释为什么会发生这种情况,我将非常感谢您的努力。
非常感谢!
【问题讨论】:
标签: python nginx flask subprocess uwsgi