FileNotFoundError: [Errno 2] No such file or directory: 'bash' when running gunicorn server from .service file
FileNotFoundError: [Errno 2] No such file or directory: 'bash' when running gunicorn server from .service file
在 运行 使用我的 gunicorn python 应用程序表单 .service 文件时出现 FileNotFoundError: [Errno 2] No such file or directory: 'bash'
错误。
但是 运行ning gunicorn 命令本身(不是来自 .service 文件)工作正常。
gunicorn 命令 运行 应用程序
gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 --bind <server_ip>:8080 wsgi
app.service 文件
[Service]
User=user
WorkingDirectory=/home/user/app
Environment="PATH=/home/user/app/app_venv/bin"
ExecStart=/home/user/app/app_venv/bin/gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker --workers 1 --bind <server_ip>:8080 wsgi
Python 产生错误的代码
import subprocess
cmd = ['bash', 'script.sh' , args.get('arg')]
try:
process = subprocess.Popen(cmd,
cwd=/path/to/bash_script,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True)
while process.poll() is None:
output = process.stdout.readline()
if(output==''):
break
emit('tg_output', output)
except subprocess.CalledProcessError as error:
pass
IMO bash
命令不在 user PATH 中。最好始终使用 bash
命令的完整路径。
cmd = ['/bin/bash', 'script.sh' , args.get('arg')]
使用which bash
获取完整路径。
您正在明确设置
Environment="PATH=/home/user/app/app_venv/bin"
您需要 PATH
包含您要使用的任何外部二进制文件的所有目录(事实上,如果您 运行无论如何都要用完整路径来处理它;所以最好的解决办法可能就是从文件中完全删除这个PATH
赋值)。
您的 Bash 脚本似乎不需要 Python 到 运行 它,而您创建的 Python 包装器似乎 运行有错误(特别是毯子 except
看起来令人不安);也许更好的解决方案是 运行 一个单独的 Bash 进程。
在 运行 使用我的 gunicorn python 应用程序表单 .service 文件时出现 FileNotFoundError: [Errno 2] No such file or directory: 'bash'
错误。
但是 运行ning gunicorn 命令本身(不是来自 .service 文件)工作正常。
gunicorn 命令 运行 应用程序
gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 --bind <server_ip>:8080 wsgi
app.service 文件
[Service]
User=user
WorkingDirectory=/home/user/app
Environment="PATH=/home/user/app/app_venv/bin"
ExecStart=/home/user/app/app_venv/bin/gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker --workers 1 --bind <server_ip>:8080 wsgi
Python 产生错误的代码
import subprocess
cmd = ['bash', 'script.sh' , args.get('arg')]
try:
process = subprocess.Popen(cmd,
cwd=/path/to/bash_script,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True)
while process.poll() is None:
output = process.stdout.readline()
if(output==''):
break
emit('tg_output', output)
except subprocess.CalledProcessError as error:
pass
IMO bash
命令不在 user PATH 中。最好始终使用 bash
命令的完整路径。
cmd = ['/bin/bash', 'script.sh' , args.get('arg')]
使用which bash
获取完整路径。
您正在明确设置
Environment="PATH=/home/user/app/app_venv/bin"
您需要 PATH
包含您要使用的任何外部二进制文件的所有目录(事实上,如果您 运行无论如何都要用完整路径来处理它;所以最好的解决办法可能就是从文件中完全删除这个PATH
赋值)。
您的 Bash 脚本似乎不需要 Python 到 运行 它,而您创建的 Python 包装器似乎 运行有错误(特别是毯子 except
看起来令人不安);也许更好的解决方案是 运行 一个单独的 Bash 进程。