问题描述
部署在服务器上的 ngrok server
,时不时会出现内存泄露而导致程序被杀掉,不厌其烦,作者也说了有严重的内存泄漏等问题,且不再维护。
解决方案
既然官方已经不维护了,也就无法从软件层面去解决问题,那只能另辟蹊径了。
首先要明白一点,当 ngrok server
进程被杀死后,客户端其实会有重连机制的。基于这一点,我们只有保证当ngrok server
进程死掉后,自动再重新启动即可。
具体做法为,定时监控 ngrok server
进程是否还在运行,如果已被杀死,则重启,下面直接上脚本。
auto_restart_ngrok.sh
新建 auto_restart_ngrok.sh 文件,具体位置自己定,为了方便,我直接放 root 用户的 home 目录下。
将下面的脚本拷贝到 auto_restart_ngrok.sh 文件中,其中 你的ngrok启动脚本,需要替换成自己的启动脚本,比如 nohup /opt/local/ngrok/bin/ngrokd -domain="ngrok.sprainkle.com" -httpAddr=":8002" -httpsAddr=":8003" -tunnelAddr=":4000" > /dev/null 2>&1 &
#!/bin/bash
result=`ps -ef | grep ngrokd | awk '{print $8}' | sed -n 'p'`
running=0
for r in $result
do
if [[ $r =~ "ngrokd" ]];then
echo "ngrok is still running."
running=1
fi
done
if [ $running == 0 ]
then
`你的ngrok启动脚本`
fi
设置定时任务
# 编辑工作表
crontab -e
# 进入编辑模式后,将下面的脚本插在最下方,最后保存退出就可以啦
*/1 * * * * /root/auto_restart_ngrok.sh
目前按照这个方案,已经运行一小段时间了,大致没什么问题,如果有什么坑,会及时在这里更新的~~~
完!