我有一个正在执行 bash 脚本的 django 应用程序。我需要重新启动 nginx 服务器,因此我运行/etc/init.d/nginx reload
它,效果很好。我一直在使用restart uwsgi
uwsgi,但我需要做一个优雅重载而不是硬重启服务器。
我怎样才能做到这一点?
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