FileNotFoundError:[Errno 2]没有这样的文件或目录:从.service文件运行gunicorn服务器时'bash'

问题描述 投票:0回答:2

运行我的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
python subprocess gunicorn
2个回答
3
投票

您是明确设置

Environment="PATH=/home/user/app/app_venv/bin"

你需要PATH来包含你想要使用的任何外部二进制文件的所有目录(事实上,如果你是通过完整路径运行它,它不需要真正包含你的脚本目录;所以最好解决方案可能只是简单地从文件中删除此PATH赋值)。

您的Bash脚本似乎不需要Python来运行它,并且您为运行它而创建的Python包装器似乎有bug(特别是毯子except看起来令人不安);或许更好的解决方案是完全运行单独的Bash流程。


-1
投票

IMO bash命令不在用户PATH中。最好始终使用bash命令的完整路径。

cmd = ['/bin/bash', 'script.sh' , args.get('arg')]

使用which bash获取完整路径。

© www.soinside.com 2019 - 2024. All rights reserved.