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のスイッチはありますか?
あなたはそれをPythonで行うことができます
import uwsgi
uwsgi.reload()
[〜#〜] 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