web-dev-qa-db-ja.com

gunicornを実行したままにする正しい方法は何ですか?

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

gunicorn app:app

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

39
nickponline

Supervisor のようなものを調べます。

22
Rachel Sanders

使用する --daemonオプション、gunicornの実行中。例:

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

53
zhiguo.wang

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

gunicorn --bind 0.0.0.0:8001 your_project.wsgi --daemon
15
Gihan Gamage

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

あなたはnginxを管理するためにあなたが持っているどんなシステムでも使用したいでしょう、そしてgunicorn(init.dまたはUpstartスクリプトを、Monit、Supervisor、Bluepill、Foremanなどの特殊なアプリケーションプロセスモニターに追加します)

7
Sean Vieira

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

ただし、次のようにその場で実行できます。

Nohup gunicorn -c config.py </dev/null >/dev/null 2>&1そしてそれはもはやターミナル接続に依存しなくなります。出力を保存する場合は、>/dev/null>somelogfileなどに置き換えることができます。

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

6
Michael Dillon

これを試して:

Nohup gunicorn app:app &
4
tonino.j

私はsystemdオプションを試してみましたが、問題なく動作しました。以下のリンクに完全な答えがあり、すべての手順を実行して、アプリをgunicornサービスとして呼び出すことができます。

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

0
siddharthrc

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

最終的に使用するプロセスマネージャーに関係なく、gunicornを「不適切に実行」する(つまり、rootユーザーとして)ままにすることは非常に簡単です。他の回答で省略されている重要な詳細のいくつかは、おそらく1人の(非ルート)ユーザーに、そのユーザーとnginxグループが所有し、アクセス許可を持つUNIXソケットにバインドするgunicornプロセスを所有させるべきだと思います_770_。 gunicornでは、代わりにマスクを指定するので、_770_を_007_に反転し、_-m_フラグを使用します。この方法では、gunicornとnginxのみがソケットに対して読み取り/書き込み/実行を行うことができ、ポートは必要ありません。 _-u_および_-g_フラグを使用して、gunicornプロセスのユーザーとグループを指定できます。これらの所有者でソケットが作成されます。最終的にはプロセスmgmt、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(つまり_0.0.0.0:5000_)があったnginxで、ソケットへのパス(つまり_/usr/share/nginx/html/gunicorn.sock_)を配置します。ここでは_--daemon_フラグを使用していませんが、execを使用していることに注意してください。これは、execで子プロセスとしてgunicornを実行するプロセスマネージャーを想定しています。

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

0
ThisGuyCantEven

このように hug 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>
0
pavan