无法使用Supervisord启动Python应用程序

2024-04-24 11:35:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小应用程序,我想开始使用supervisord。我试过以下方法

我最初的shell脚本可以通过将PID保存在文本文件中来启动和停止celeri和Flask作为守护进程。由于supervisord会负责销毁它,所以我去掉了stop部分,并将脚本非守护程序化。在

经过反复试验,这些是脚本和conf duos,我认为有道理,但他们不起作用。在

1

Shell脚本

#!/bin/bash


if [[ $1 == "gunicorn" ]]
then
    cd /home/abhirath/Desktop/Hitler
    source env/bin/activate
    python env/bin/gunicorn -b 0.0.0.0:3333 -w 3 gunicornserve:app

elif [[ $1 == "celery" ]]
then
    cd /home/abhirath/Desktop/Hitler
    source env/bin/activate
    python env/bin/celery -A testrunner worker --concurrency=3 --loglevel=info

else
    echo "Usage:-"
    echo "To start celery:-"
    echo "./hitler.sh celery"
    echo "To start Gunicorn"
    echo "./hitler.sh gunicorn"
fi

Conf文件

^{pr2}$

没有shell文件

[group:hitler]
programs=gunicorn,celery

[program:gunicorn]
command=source env/bin/activate; python env/bin/gunicorn -b 0.0.0.0:3333 -w 2 gunicornserve:app;
directory=/home/abhirath/Desktop/Hitler

[program:celery]
command=source env/bin/activate; python env/bin/celery -A testrunner worker --concurrency=4 --loglevel=info;
directory=/home/abhirath/Desktop/Hitler

stderr_日志文件,autostart,autorestart,stopasgroup,killasgroup与#1相同

我收到一条消息说找不到命令源。我在同一个目录下的终端上尝试了相同的命令,它起作用了。在


Shell脚本

#!/bin/bash


    if [[ $1 == "gunicorn" ]]
    then
        source env/bin/activate
        python env/bin/gunicorn -b 0.0.0.0:3333 -w 3 gunicornserve:app

    elif [[ $1 == "celery" ]]
    then
        source env/bin/activate
        python env/bin/celery -A testrunner worker --concurrency=3 --loglevel=info

    else
        echo "Usage:-"
        echo "To start celery:-"
        echo "./hitler.sh celery"
        echo "To start Gunicorn"
        echo "./hitler.sh gunicorn"
    fi

形态

[group:hitler]
programs=gunicorn,celery

[program:gunicorn]
command=./hitler.sh gunicorn
directory=/home/abhirath/Desktop/Hitler    

[program:celery]
command=./hitler.sh celery
directory=/home/abhirath/Desktop/Hitler

stderr_日志文件,autostart,autorestart,stopasgroup,killasgroup与#1相同


我还尝试使用command=bash-c“command here”,尽管我觉得在上述所有情况下都不需要它。文档中提到了here。在

我得到了以下错误,我不知道为什么:在

Could not spawn

Process Exited too quickly


Tags: echoenv脚本sourcehomebinshcommand
2条回答

在#2的情况下,实际上不需要激活virtualenv。您可以将其更改为:

[group:hitler]
programs=gunicorn,celery

[program:gunicorn]
command=/absolute/path/to/env/bin/gunicorn /absolute/path/to/gunicornserve:app -b 0.0.0.0:3333 -w 2
directory=/home/abhirath/Desktop/Hitler

[program:celery]
command=/absolute/path/to/env/bin/celery -A testrunner worker  concurrency=4  loglevel=info
directory=/home/abhirath/Desktop/Hitler

@MohammadAmin和@ymonad给出了很好的建议,我在回答中使用了这些建议。由于这里给出的解释,我找到了一个更简单的解决方案->;Supervising virtualenv django app via supervisor

脚本文件

#!/bin/bash


if [[ $1 == "gunicorn" ]]
then
  env/bin/python env/bin/gunicorn -b 0.0.0.0:3333 -w 3 gunicornserve:app 

elif [[ $1 == "celery" ]]
then
  export C_FORCE_ROOT='true'
  env/bin/python env/bin/celery -A testrunner worker  concurrency=3  loglevel=info

else
  echo "Usage:-"
  echo "To start celery:-"
  echo "./hitler.sh celery"
  echo "To start Gunicorn"
  echo "./hitler.sh gunicorn"

fi

因为我将项目目录指定为环境路径,所以不需要指定环境中Python解释器的绝对路径。在

监督员确认

^{pr2}$

相关问题 更多 >