スーパーバイザ プロセスは「終了ステータス 1; 予期しない」で終了します。

スーパーバイザ プロセスは「終了ステータス 1; 予期しない」で終了します。

スーパーバイザーで 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_appCTRL-C を実行するまでサーバーがハングし、supervisord.log ファイルに上記のエラーが記録されます。

私が何を見逃しているのか、誰か手がかりを持っていますか?

答え1

解決策を見つけたようです。スーパーバイザーにサーバースクリプトを非特権で実行させることはできません。my-www-userログファイルなどに書き込む必要があるため、より多くのアクセスが必要です。したがって、解決策は、サーバーをルートとして実行し、gunicorn_djangoにワーカープロセスを生成させることです。my-www-user

[program:my_app]
user=root
; rest of config follows

答え2

‍ を実行しようとしたときにこのエラーが発生しましたがCelery、まったく逆の問題が発生しました。

ユーザーを から に変更したらroot解決www-dataしました。

答え3

私の場合、同じエラーが発生したため、次のことがわかるまでデバッグしました。

ディスクがいっぱいでしたこれを解決するためにディスク容量を増やしました。

(愚かなエラー、簡単に修正できます - ここでこれを読むことで、誰かが時間を無駄にしないのに役立つかもしれません)

他のオプションについては、この質問にもリンクしています:

関連情報