如何通过 bash 脚本进行优雅的 uwsgi 重新加载?

dar*_*ren 11 python uwsgi

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

我怎样才能做到这一点?


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

git*_*rik 13

签到

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

kill -HUP <process-id>
Run Code Online (Sandbox Code Playgroud)

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

--pidfile=/tmp/uwsgi.pid
Run Code Online (Sandbox Code Playgroud)

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

uwsgi --reload /tmp/uwsgi.pid
Run Code Online (Sandbox Code Playgroud)

触摸重新加载

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

--touch-reload=/some/file
Run Code Online (Sandbox Code Playgroud)

然后 uWSGI 将在您触摸该文件时重新加载:

touch /some/file
Run Code Online (Sandbox Code Playgroud)

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

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


Mik*_*ike 0

你可以用Python来做

import uwsgi
uwsgi.reload()
Run Code Online (Sandbox Code Playgroud)