共计 1177 个字符,预计需要花费 3 分钟才能阅读完成。
用 nginx+php7 搭建了一台服务器,因为请求量太大,而且 php 里面又有挂起的任务,导致 php-fpm 在高峰期的时候经常死掉,把 php-fpm 的最大进程数已经改到 1000 了,还是吃不消,cpu 也是超负荷,每次都要手动重启,太烦人,因此本人写了一个 shell 脚本,后台监听 php-fpm,等达到一定数量让他重启,这样就有效的解决了手动重启,死机问题了。
1. 声明文档头跟定义变量
#!/usr/bin/env bash
maxCount=300 #php-fpm 最大进程数
basePath=$(cd `dirname $0`; pwd) #脚本所在目录
pidFilePath="$basePath/pid.conf" #pid 存放文件
errorFilePath="$basePath/error.txt" #错误日志存放文件
2. 定义关键函数
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
}
3. 加入启动参数
case $1 in
"restart") restart
;;
"start") start
;;
"stop") stop
;;
"run") main
;;
"stopweb") stopweb
;;
*) echo "cmd error!"
;;
esac
4. 终止脚本
exit 0
运行命令
./webserver restart #重启 php-fpm
./webserver start #开启 php-fpm
./webserver stop #停止 php-fpm
setsid ./webserver run & #开启监听,后台运行 &
./webserver stopweb #停止监听
正文完
星哥说事-微信公众号
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)