美文网首页
php-fpm死机解决办法,脚本后台自动重启

php-fpm死机解决办法,脚本后台自动重启

作者: Renew全栈工程师 | 来源:发表于2019-12-06 16:14 被阅读0次

本人用nginx+php7搭建了一台服务器,因为请求量太大,而且php里面又有挂起的任务,导致php-fpm在高峰期的时候经常死掉,吧php-fpm的最大进程数已经改到1000了,还是吃不消,cpu也是超负荷,每次都要手动重启,太烦人,因此本人写了一个shell脚本,后台监听php-fpm,等达到一定数量让他重启,这样就有效的解决了手动重启,死机问题了。

不多说上代码

#!/usr/bin/env bash

maxCount=300 #php-fpm最大进程数

basePath=$(cd `dirname $0`; pwd) #脚本所在目录

pidFilePath="$basePath/pid.conf" #pid存放文件

errorFilePath="$basePath/error.txt" #错误日志存放文件

getDateTime(){

    date "+%Y-%m-%d %H:%M:%S"

}

restart(){

    kill -USR2 $(cat /usr/local/php/var/run/php-fpm.pid)

}

start(){

    /usr/local/php/sbin/php-fpm

}

stop(){

    kill $(cat /usr/local/php/var/run/php-fpm.pid)

}

stopweb(){
  if [ -f "$pidFilePath" ];then
      kill $(cat "$pidFilePath") 2 > /dev/null
      rm -r "$pidFilePath"
  fi
}

main(){
  stopweb

  echo "$$">>"$pidFilePath"

  while((1))
    do
      count=$(ps aux | grep -c php-fpm)
      if (("$count">="$maxCount"));then
          restart
          date=$(getDateTime)
          echo "date:$date,maxCount:$maxCount,count:$count">>"$errorFilePath"
      fi
      sleep 10
     done
}
case $1 in
    "restart") restart
    ;;
    "start") start
    ;;
    "stop") stop
    ;;
    "run") main
    ;;
    "stopweb") stopweb
    ;;
    *) echo "cmd error!"
    ;;
esac
exit 0

2.运行命令

./webserver restart #重启php-fpm

./webserver start #开启php-fpm

./webserver stop #停止php-fpm

setsid ./webserver run & #开启监听,后台运行&

./webserver stopweb #停止监听

相关文章

网友评论

      本文标题:php-fpm死机解决办法,脚本后台自动重启

      本文链接:https://www.haomeiwen.com/subject/cnsegctx.html