私はスーパーバイザーで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
私のサーバースクリプトは次のようになります。
#!/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
そして私のスーパーバイザー設定は次のようになります:
[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
su
をmy-www-user
アカウントサーバーが正常に起動します。私がする時 Sudo supervisorctl start my_app
CTRL-cを実行するまでハングするだけです。その後、supervisord.logファイルで上記のエラーを見つけます。
誰かが私が欠けているものについての手がかりを持っていますか?
私は解決策を見つけたようです。より多くのアクセスを必要とするログファイルなどに書き込む必要があるため、スーパーバイザーに権限のないmy-www-user
としてサーバースクリプトを実行させることはできません。したがって、解決策は、サーバーをルートとして実行し、gunicorn_Djangoにワーカープロセスをmy-www-user
として起動させることです。
[program:my_app]
user=root
; rest of config follows
Celeryを実行しようとしたときにこのエラーが発生しましたが、正反対の問題が発生しました。ユーザーをrootからwww-dataに変更し、それで解決しました。