在做微信小游戏的时候,使用 PHP + Swoole 作为网络通信框架,在某些情况下,如系统负载过大swoole无法申请到内存而挂掉、swoole底层发生段错误、Server占用内存过大被内核Kill,或者被某些程序误杀。那swoole-server将无法提供服务。有一个非常有效并且在BAT等大型公司常用的方案是crontab重启监控。
原理是每1分钟执行一次shell脚本,检测端口是否存活,如果存在则跳过。如果发现主进程已经挂掉,则重新启动Server。
- #!/bin/bash
- TCPListeningnum=`netstat -an | grep “:3389” | awk ‘$1 == “tcp” && $NF == “LISTEN” {print $0}’ | wc -l`
- if [ $TCPListeningnum -eq 0 ]
- then
- {
- echo “`date` : listener port is down”>>/home/wwwlogs/swoole_down.log
- #ps -eaf |grep “swoole:command” | grep -v “grep”| awk ‘{print $2}’|xargs kill -9
- #sleep 2
- #ulimit -c unlimited
- #如果3389端口down了,重启namenode服务
- /usr/local/php/bin/php /home/wwwroot/h5guess/artisan swoole:command start
- }
- else
- {
- echo “3389端口正常” >>/home/wwwlogs/swoole_ok.log
- }
- fi