主管进程以“退出状态 1”退出;没想到'

Sæv*_*var 5 django supervisord gunicorn

我正在尝试在主管中运行 gunicorn_django 进程,但它总是立即退出,并出现此错误:

INFO exited: my_app (exit status 1; not expected)
INFO received SIGCLD indicating a child quit
INFO gave up: my_app entered FATAL state, too many start retries too quickly
Run Code Online (Sandbox Code Playgroud)

我的服务器脚本如下所示:

#!/bin/bash
set -e
LOGFILE=/var/log/gunicorn/my_app.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=3
USER=my-www-user
GROUP=my-www-user
cd /home/my-www-user/my_app
source /home/my-www-user/.virtualenvs/my_app/bin/activate
test -d $LOGDIR || mkdir -p $LOGDIR
gunicorn_django -w $NUM_WORKERS --debug \
 --user=$USER --group=$GROUP \
 --log-level=debug --log-file=$LOGFILE 2>>$LOGFILE\
 --pythonpath=my_app --settings=settings.active \
 my_app.wsgi:application
Run Code Online (Sandbox Code Playgroud)

我的主管配置如下所示:

[program:my_app]
directory=/home/my-www-user/my_app/
user=my-www-user
command=/home/my-www-user/my_app/server.sh
stdout_logfile=/var/log/supervisor/my_app.log
stderr_logfile=/var/log/supervisor/my_app-error.log
autostart=true
autorestart=true
Run Code Online (Sandbox Code Playgroud)

当我su进入my-www-user帐户时,服务器正常启动。当我这样做时,sudo supervisorctl start my_app它只是挂起,直到我执行 CTRL-c,然后我在 supervisord.log 文件中找到了上面的错误。

有没有人知道我错过了什么?

Sæv*_*var 3

我似乎找到了解决办法。我不能让主管以非特权身份运行我的服务器脚本,my-www-user因为它必须写入需要更多访问权限的日志文件等。所以解决方案是以root身份运行服务器并让gunicorn_django生成工作进程my-www-user

[program:my_app]
user=root
; rest of config follows
Run Code Online (Sandbox Code Playgroud)

  • 这其实是非常危险的,千万不要这样做。 (2认同)