如何通过 bash 脚本优雅地重新加载 uwsgi?

如何通过 bash 脚本优雅地重新加载 uwsgi?

我有一个正在执行 bash 脚本的 django 应用程序。我需要重新启动 nginx 服务器,因此我运行/etc/init.d/nginx reload它,效果很好。我一直在使用restart uwsgiuwsgi,但我需要做一个优雅重载而不是硬重启服务器。

我怎样才能做到这一点?


reload uwsgi我目前正在通过运行 bash函数subprocess.popen。它似乎只重新加载调用子进程的进程,而不是 uwsgi 实例托管的所有站点。importing uwsgi并且运行uwsgi.reload似乎也只影响调用进程。是否有一个通过 python 或 bash 的 uwsgi 开关,允许重新启动所有 uwsgi 进程

答案1

你可以用python来做

import uwsgi
uwsgi.reload()

答案2

信号

你可以通过向你的 uWSGI 进程发送 SIGHUP 信号来重新启动 uWSGI,如下所示:

kill -HUP <process-id>

如果你想在 bash 脚本中自动执行此操作,你可以让 uWSGI 通过提供选项写掉它的进程 id pidfile,例如:

--pidfile=/tmp/uwsgi.pid

然后您可以通过以下方式重新加载该进程:

uwsgi --reload /tmp/uwsgi.pid

触摸重新加载

你也可以使用参数启动 uWSGI touch-reload,该参数指定一个文件,当触摸该文件时会使 uWSGI 重新加载:

--touch-reload=/some/file

然后当你触摸该文件时,uWSGI 将重新加载:

touch /some/file

请记住,您只能在 uWSGI 以主进程模式运行时重新加载它,但通常情况如此。

更多信息: http://uwsgi-docs.readthedocs.io/en/latest/Management.html#reloading-the-server

相关内容