web-dev-qa-db-ja.com

bashスクリプトを介して優雅なuwsgiリロードを行う方法?

Django bashスクリプトを実行しているアプリケーションがあります。nginxサーバーを再起動する必要があるので、/etc/init.d/nginx reloadを実行すると問題なく機能します。restart uwsgiを使用してuwsgiですが、ハードサーバーを再起動する代わりにgraceful reloadを実行する必要があります。

これどうやってするの?


現在、reload uwsgiからbash subprocess.popen関数を実行しています。 uwsgiインスタンスによってホストされているすべてのサイトではなく、サブプロセスを呼び出しているプロセスのみをリロードしているようです。 importing uwsgiおよび実行中のuwsgi.reloadも、呼び出しプロセスにのみ影響するようです。 pythonまたはすべてのuwsgiプロセスの再起動を許可するbashを介したuwsgiのスイッチはありますか?

9
darren

あなたはそれをPythonで行うことができます

import uwsgi
uwsgi.reload()
0
Mike

[〜#〜] sighup [〜#〜]

次のようにSIWSUPシグナルをuWSGIプロセスに送信することにより、uWSGIを再起動できます。

kill -HUP <process-id>

これをbashスクリプトで自動化したい場合は、次のようにpidfileオプションを指定して、uWSGIにプロセスIDを書き出させることができます。

--pidfile=/tmp/uwsgi.pid

その後、次の方法でプロセスをリロードできます。

uwsgi --reload /tmp/uwsgi.pid

touch-reload

touch-reload引数を使用してuWSGIを開始することもできます。これは、タッチしたときにuWSGIをリロードさせるファイルを指定します。

--touch-reload=/some/file

次に、ファイルに触れるとuWSGIがリロードします。

touch /some/file

UWSGIは、マスタープロセスモードで実行されている場合にのみリロードできることに注意してください。ただし、通常はそうです。

詳細: http://uwsgi-docs.readthedocs.io/en/latest/Management.html#reloading-the-server

10
gitaarik