我用swoole写了一个服务端,打算将他以守护进程的方式挂在服务器上一直跑,并且能让该脚本在因为出错而意外退出之后能够尽快重启,请问怎么做?
我用swoole写了一个服务端,打算将他以守护进程的方式挂在服务器上一直跑,并且能让该脚本在因为出错而意外退出之后能够尽快重启,请问怎么做?
写好php脚本。建议定期检测内存占用,核心逻辑就不写了。这个跟业务有关。
if(memory_get_usage()>100*1024*1024){
exit(0);//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端
}
假设该php文件的路径为/root/run.php
打开终端
setsid php /root/run.php > /dev/null &
编辑进程监控脚本,当进程不存在时,自动重启 /root/monitor.sh
#!/bin/bash
alive=`ps aux|grep root\/run|grep -v grep|wc -l`
if [ $alive -eq 0]
then
php /root/run.php > /dev/null &
fi
添加计划任务(每分钟检测一次)
crontab -e
* * * * * /root/monitor.sh > /dev/null &
手工
把脚本写成一直循环就可以了,比如 while(1),这样就可以一直跑了。
在这个脚本头,这个判断,如果已经有这个脚本的进程了,就直接退出,没有才执行,
另外写个linix计划任务,比如每分钟去执行这个php脚本。
执行一次脚本之后,脚本就会一直跑了,计划任务会每分钟去执行这个脚本,如果这个脚本活着,就直接退出,死了就开始执行。
1.crontab肯定得有,每分都去检测有没有,(ps -ef | grep..),有退出,没有就建立执行
2.一直运行的进程,可以死循环..
3.crontab脚本可以检测你这一直运行进程的状态,出问题,一直等待,没响应还是别的问题,得自己能杀死且重启
2 回答3.1k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
用一个简单可靠的Shell脚本来守护一个可能会突发退出的PHP服务
/etc/rc.local 里加入开机启动命令:
swoole.sh 内容如下:
其中:
也就是swoole.sh每隔1秒检测一次目录/proc/PID是否存在,如果不存在,则重新启动服务.
swoole.sh.log 记录的是服务重新启动的时间.
swoole.log 记录的是服务自己的输出.
比如用Shell守护vmstat:
这个vmstat.sh的脚本也可以用PHP实现: