运行我的gunicorn python应用程序表单.service文件时出现FileNotFoundError: [Errno 2] No such file or directory: 'bash'
错误。
但是,单独运行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
您是明确设置
Environment="PATH=/home/user/app/app_venv/bin"
你需要PATH
来包含你想要使用的任何外部二进制文件的所有目录(事实上,如果你是通过完整路径运行它,它不需要真正包含你的脚本目录;所以最好解决方案可能只是简单地从文件中删除此PATH
赋值)。
您的Bash脚本似乎不需要Python来运行它,并且您为运行它而创建的Python包装器似乎有bug(特别是毯子except
看起来令人不安);或许更好的解决方案是完全运行单独的Bash流程。
IMO bash
命令不在用户PATH中。最好始终使用bash
命令的完整路径。
cmd = ['/bin/bash', 'script.sh' , args.get('arg')]
使用which bash
获取完整路径。