如何通过SSH命令行禁用/启用uWSGI Web服务器(Emperor模式)
解决方案:uWSGI Emperor模式下临时启用/禁用Web GUI
问题分析
你执行/etc/init.d/uwsgi stop后Web GUI仍可访问,核心原因是procd的respawn配置:你的init.d脚本里设置了procd_set_param respawn,这意味着procd会在uWSGI Emperor进程退出后自动重启它;而Emperor本身会自动监控/etc/uwsgi/vassals/目录,拉起所有配置对应的vassal进程(也就是你的luci Web GUI)。
临时禁用Web GUI的方法
方法1:让Emperor忽略目标vassal配置(推荐)
Emperor默认会监控vassals目录下的配置文件,通过重命名配置文件可让Emperor停止管理对应vassal:
# 禁用Web GUI:重命名luci的vassal配置 mv /etc/uwsgi/vassals/luci-cgi_io.ini /etc/uwsgi/vassals/luci-cgi_io.ini.disabled
Emperor检测到文件移除后,会自动停止对应的vassal进程。
重新启用时恢复文件名即可:
# 启用Web GUI:恢复配置文件名 mv /etc/uwsgi/vassals/luci-cgi_io.ini.disabled /etc/uwsgi/vassals/luci-cgi_io.ini
方法2:停止vassal进程并阻止Emperor重启
- 查找luci vassal的进程ID:
ps | grep luci-cgi_io
- 终止该进程:
kill <vassal-pid>
- 临时修改vassal配置,添加
die-on-term = true(让Emperor收到进程终止信号后不再重启它):
# 在luci-cgi_io.ini中新增配置项 die-on-term = true
注:该修改重启Emperor后会失效,仅适用于临时场景。
方法3:完全停止Emperor并阻止procd重启
如果需要彻底关闭uWSGI服务(包括Emperor),需先禁用procd的自动重启机制:
- 临时注释init.d脚本中的respawn参数:
sed -i 's/procd_set_param respawn/#procd_set_param respawn/' /etc/init.d/uwsgi
- 重新加载服务配置:
/etc/init.d/uwsgi reload
- 停止uWSGI服务:
/etc/init.d/uwsgi stop
恢复自动重启时,取消注释并重新加载配置:
sed -i 's/#procd_set_param respawn/procd_set_param respawn/' /etc/init.d/uwsgi /etc/init.d/uwsgi reload
参考资料(基于uWSGI 2.0.18版本)
- Emperor模式vassal管理机制:Emperor会实时监控vassals目录的文件变化,自动创建/销毁对应vassal进程
die-on-term配置项:控制vassal进程被终止后,Emperor是否触发重启- procd respawn参数:OpenWRT类系统中,procd通过该参数实现进程的自动拉起
内容的提问来源于stack exchange,提问作者tim11g
相关产品推荐
相关产品推荐

