監測伺服器php-fpm情況,自動重啟。

dj1540225203發表於2020-12-16

場景①:單機部署的情況下;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

 

相關文章