有没有办法安全地按需重启 mod_wsgi 进程,可能在多台机器上运行?我正在mod_wsgi
使用 apache 在守护进程模式下为 django 应用程序提供服务:
WSGIDaemonProcess myapp user=user group=user processes=30 threads=1
WSGIProcessGroup myapp
我读了mod_wsgi
文档但所有建议的解决方案都不适用于我:
- 不建议在生产系统中运行监控脚本。
- 对我来说,发送终止信号并不安全。我想避免中断正在运行的请求。重新加载不能导致服务崩溃。速度放慢一点也没关系。
- 触摸
mod_wsgi
配置文件可以安全地完成此操作,但如何在多台机器上执行此操作?
理想情况下,我们应该能够通过一个操作重新启动进程。有什么建议吗?
注意:我必须用一个线程运行多个进程。我的应用程序不是线程安全的。
编辑,如果那是我唯一的选择,我可以从 Puppet 执行此操作。但我更喜欢从特殊受保护的视图执行此操作。我认为这在一台机器上很容易,但在多台机器上则不然
多谢
答案1
答案2
在现有请求如何生效方面,(2) 和 (3) 之间没有区别。发送 kill SIGINT 不仅会退出进程,还会触发与 (2) 相同的有序关闭。事实上,(2) 内部只是向其自身发送 SIGINT。重要的是识别需要向其发送 SIGINT 的进程。为此,您应该对 WSGIDaemonProcess 使用“display-name”选项,以便它们在“ps”输出中被命名并且更容易识别。
答案3
接触 mod_wsgi 配置文件可以安全地完成此操作,但如何在多台机器上执行此操作?
我猜这解决了如何以非常优雅的方式触发 mod_wsgi 重新加载脚本的问题。为了同时在多个主机之间分配此操作,我建议使用类似密码(并行 ssh)。它的配置应该没有问题。