本人用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 #停止监听 (责任编辑:IT) |