为什么要监听
要是挂了,电话会被打爆的。
在swool 官方文档中写到:
在某些情况下,如系统负载过大swoole无法申请到内存而挂掉、swoole底层发生段错误、Server占用内存过大被内核Kill,或者被某些程序误杀。那swoole-server将无法提供服务,导致业务中断,公司收入出现损失。
利用进程的方式检测可以直接用官方提供的案例点击进入
利用监听端口的形式来restart swool 服务
原理和监听进程差不多, 每1分钟去监听这个端口是否存在, 如果不存在,则启动项目中的swool 服务。
check-port-on-crontab.sh
port=9502
#根据端口号查询对应的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
#杀掉对应的进程,如果pid不存在,则不执行
if [ -z "$pid" ]; then
/usr/local/php/bin/php /www/im/swoole/im.php
fi
目前的端口是9502,把这个端口kill 掉, 再执行 这个sh 文件,如果服务是正常的则监听是正常的。
加入crontab
crontab -e
*/1 * * * * sh /www/sh/check-port-on-crontab.sh>/www/log/check-swool-port.log 2>&1 &
每一分钟去执行 check-port-on-crontab.sh 这个脚本。同时加入自定义的log 日志中。