场景①:单机部署的情况下;php-fpm挂了导致服务器接口返回500报错。因为情况很多,可能是高并发或者其他意外情况导致的线程不够用,内存不够,CPU占满等情况。
场景②:多服务器负载均衡部署情况下;可能某台服务器会php-fpm因很多情况也会和场景①的情况。
如果是大晚上的突然挂掉岂不是很尴尬?怎么处理呢?
单机情况处理方案:cron+php脚本检测
①php脚本
<?php
$url = '要监测的网站域名';
$cmd = 'service php-fpm restart';
for($i = 0; $i < 1; $i ++){
$exec = "curl connect-timeout 3 -I $url 2>/dev/null";
$res = shell_exec($exec);
echo "\r\n".$res.'啥也没有';
if(stripos($res, '502 Bad Gateway') !== false){
echo "\r\n出现502 并重启php-fpm".date('Y-m-d H:i:s');
$ss= shell_exec($cmd);
echo "\r\n".$ss;
exit();
}elseif($res==''){
echo "\r\n程序返回是空 并重启nginx".date('Y-m-d H:i:s');
$cmd = 'service nginx restart';
$ss= shell_exec($cmd);
echo "\r\n".$ss;
exit();
}else{
echo "\r\n程序正常";
}
}
②添加定时任务 如:执行时间自己决定。
*/30 * * * * /usr/bin/php /root/nginx-status.php >> /var/log/nginx-log.log
多服务器处理方案:各台服务器上写shell脚本 +脚本接口访问报错时做“标示”
#可参考:http://www.360doc.com/content/18/0612/16/41766228_761758059.shtml;也是做标示去判断是否php-fpm挂!
#!/bin/bash
#check php-fpm server up/down
while :
do
sleep 15;
/usr/bin/curl https://api.xxx.com/public/status.php << ! > /alidata/server/fpm.log
quit
!
timestamp=`date '+%Y-%m-%d %H:%M:%S'`
content=$(cat /alidata/server/fpm.log)
if [ "$content" = "ok" ];then
echo -e "ok\n" ;
else
/etc/init.d/php-fpm restart
echo -e "$timestamp"" php-fpm restart\n" >> /alidata/server/restart.log;
fi
done