FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'bash' при запуске сервера gunicorn из файла .service - PullRequest
0 голосов
/ 19 марта 2019

Ошибка получения FileNotFoundError: [Errno 2] No such file or directory: 'bash' при запуске моего приложения-файла gunicorn python.

Однако выполнение команды 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

Ответы [ 2 ]

3 голосов
/ 19 марта 2019

Вы явно устанавливаете

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

Вам необходимо, чтобы PATH содержал все каталоги любых внешних двоичных файлов, которые вы хотите использовать (и на самом деле нет необходимости в нем содержать каталог вашего скрипта, если вы запускаете его по полному пути в любом случае, поэтому лучшее решение, вероятно, состоит в том, чтобы просто полностью удалить это назначение PATH из файла).

Похоже, что вашему скрипту Bash не нужен Python для его запуска, а созданная вами оболочка Python, похоже, содержит ошибки (в частности, одеяло except выглядит нервно); возможно, лучшим решением было бы запустить отдельный процесс Bash.

0 голосов
/ 19 марта 2019

IMO команда bash отсутствует у пользователя PATH. Лучше всегда использовать полный путь команды bash.

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

Используйте which bash, чтобы получить полный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...