59

Flask + Nginx+Gunicornをデプロイしたいと思います。Nginxをセットアップして実行し、ドキュメントで説明されているようにgunicornを実行します。

gunicorn app:app

しかし、サーバーからログアウトすると、gunicornプロセスは終了しますか?Nginxが接続するために実行を継続し、クラッシュした場合に再起動するための正しい方法は何ですか?

4

9 に答える 9

82

--daemongunicornの実行中にオプションを使用します。例:

gunicorn grand56.wsgi:application --name grand56 --workers 3 --user=root --group=root --bind=127.0.0.1:1001 --daemon

于 2015-05-28T09:51:43.850 に答える
32

gunicornのバインディングコマンドに--daemonを使用します。元:

gunicorn --bind 0.0.0.0:8001 your_project.wsgi --daemon
于 2018-10-25T06:44:06.113 に答える
28

スーパーバイザーのようなものを調べます。

非常に便利なチュートリアルはここにありますhttps://www.codingforentrepreneurs.com/blog/hello-linux-setup-gunicorn-and-supervisor/

于 2012-12-01T00:09:01.420 に答える
9

注意すべき重要な点は、コマンドラインからプロセスを開始すると、それはターミナルプロセスの子(つまり、の子bash)であるということです。サーバーからログアウトすると、bashプロセスは終了します-すべての子も同様です。

nginxを管理し、gunicornも管理するために使用しているシステムを使用することをお勧めします(init.dMonit、Supervisor、Bluepill、Foremanなどの特殊なアプリケーションプロセスモニターまで、またはUpstartスクリプトから)

于 2012-12-01T03:03:16.237 に答える
8

これを試して:

nohup gunicorn app:app &
于 2012-12-01T00:02:43.920 に答える
6

ショーンに注意してください。

ただし、次のようにオンザフライで実行できます。

nohup gunicorn -c config.py </dev/null >/dev/null 2>&1そしてそれはもはや端末接続に依存しなくなります。出力を保存したい場合>/dev/nullのようなものに置き換えることができます。>somelogfile

ただし、本番環境で使用する場合は、プロセスの管理に使用するツールに統合するのが最適です。

于 2014-03-17T23:21:40.200 に答える
1

このようにハグAPIを実行しています。

--daemonは、プロセスをバックグラウンドで維持することです。

--access-logfileは、リクエストログを保持します

--bind = <ip>:<port> IPを指定すると、他のシステムからのアクセスが許可されます(プロキシが不要な場合)。

gunicorn <pyscirpt_name>:__hug_wsgi__ --name  caassist -w 4 --access-logfile /var/logs/gunicorn/gunicorn_access.log --daemon --bind=<ip>:<port>
于 2018-09-11T08:00:12.117 に答える
1

Supervisorプロセス管理のための優れたクロスプラットフォームソリューションです。これは非常に機能が豊富で、(私の意見では)いくつかのバニラLinuxの代替手段(upstart、sysv、systemd)よりもはるかに多くの構成が必要です。プロセスを開始、監視、および(必要に応じて)再開するには、必ずこのようなものを使用する必要があります。

最終的にどのプロセスマネージャーを使用する場合でも、gunicornを「不適切に実行」したままにすることができます(つまり、rootユーザーとして)。他の回答で省略されている重要な詳細のいくつかは、おそらく1人の(root以外の)ユーザーが、そのユーザーとnginxグループが所有し、アクセス許可を持つunixソケットにバインドするgunicornプロセスを所有している必要があるということ770です。を使用すると、代わりにマスクを指定するため、フラグをgunicorn反転770007て使用します。-mこのように、gunicornとnginxのみがソケットに対して読み取り/書き込み/実行でき、ポートは必要ありません。-uとを使用して、gunicornプロセスのユーザーとグループを指定できます。-gフラグを立てると、それらの所有者とのソケットが作成されます。プロセス管理、nginx / gunicornに使用することになったものは何でも、スタートアップスクリプトに次のようなものが必要になる可能性があります。

exec gunicorn wsgi:app -u gunicorn -g nginx -m 007 -b gunicorn.sock >> /var/log/$<service_name>.sys.log 2>&1

gunicornユーザーがログファイルへの書き込み権限を持っていることを確認してください。次に、以前はip / port(つまり)を持っていたnginxで0.0.0.0:5000、ソケットへのパス(つまり/usr/share/nginx/html/gunicorn.sock)を入力します。--daemonここではフラグを使用していませんが、使用していることに注意してくださいexec。これは、gunicornを子プロセスとして実行するプロセスマネージャーを想定していますexec

ここですべての異なるフラグを見つけることができます。

于 2019-07-24T22:01:52.230 に答える
0

systemdオプションを試してみましたが、正常に機能しました。以下のリンクに完全な回答があり、アプリをgunicornサービスとして呼び出すためのすべての手順が記載されています。

https://askubuntu.com/questions/930589/running-upstart-script-on-17-04/1010398#1010398

于 2018-02-28T12:16:58.477 に答える