问题描述
web.py框架工程,使用nohup方式启动,访问几次后服务平台挂掉,页面报错如下:
服务重启,即可恢复;但是过一会又会重复当前异常,纠结(☍﹏⁰)……
原因分析
百度搜索后,找到这个链接https://www.cnblogs.com/icejoywoo/p/3908290.html,回答比较符合当前状况:
ll /prod/${pid}/fd,即当前进程打开的所有文件:
fd为2的文件,即stderr(标准错误输出)指向一个broken pipe,但实际上应该指向一个日志文件。可能是某个操作导致其指向了一个pipe。
“[Errno 32] Broken pipe “ 产生的原因:
由于 client 在服务器返回前主动断开连接,所以服务器在返回时写 socket 收到SIGPIPE报错。
当前解决方案
考虑到nohup守护进程稳定性问题,此次替换成uWSGI启动,解决了上述问题。
nohup:
守护进程,不间断地运行命令,忽略所有挂掉信号。
uWSGI:
实现了WSG