uWSGI Emperor不会通过触摸.ini文件来重新加载Vassal

时间:2018-08-07 19:46:40

标签: python django uwsgi

我有多个uWSGI附庸,全部由uwsgi皇帝监视。我更新了我的应用程序(Django)的代码,并希望皇帝对其中一个附庸进行干净的重新加载。为此,我

touch vassal-foo.ini

在日志中,我看到[emperor] reload the uwsgi instance vassal-foo.ini。这听起来很有希望,但该应用未重新加载。它继续运行旧版本。检查进程(PID)的启动时间,实际上,它尚未重新启动。

任何提示可能是什么原因造成的?可能很少见的几件事:

  • 皇帝和附庸都没有在主控模式下运行
  • Emperor随pip一起安装,并在initctl下运行
  • kill -9-进入附庸会触发正确的重新加载(显然)
  • 我使用符号链接
  • 我的Python应用程序(threading.Thread(target).start())中有一个辅助线程,运行daemon=True

我尝试过但不起作用的事情:

  • 运行该进程而无需任何其他线程(删除threading.Thread(target).start()
  • 触摸touch --no-dereference vassal-foo.ini
  • --emperor-nofollow起皇帝

vassal-foo.ini:

master         = false
processes      = 1
thunder-lock   = true
enable-threads = true
socket         = /tmp/%n.sock
chmod-socket    = 666
vacuum          = true

皇帝:

exec /tmp/uwsgi --emperor /tmp/configs/uwsgi/ --die-on-term --uid me --gid me --logto /tmp/logs/uwsgi-emperor.log

uWSGI版本

$ uwsgi --version
2.0.17

1 个答案:

答案 0 :(得分:0)

问题是您的附庸不在主模式下运行。

uwsgi重新加载a的所有方法都需要主进程。

在皇帝模式下,当您触摸ini时,皇帝会向该附庸国发送叹息,并在日志中记录该附庸国已重新载入。但是,如果附庸国没有高手,那就无视此举。因此,这就是为什么您在日志中看到重新加载但什么都没发生的原因。