本人用nginx+php7搭建了一臺服務器,由於請求量太大,並且php裏面又有掛起的任務,致使php-fpm在高峯期的時候常常死掉,吧php-fpm的最大進程數已經改到1000了,仍是吃不消,cpu也是超負荷,每次都要手動重啓,太煩人,所以本人寫了一個shell腳本,後臺監聽php-fpm,等達到必定數量讓他重啓,這樣就有效的解決了手動重啓,死機問題了。php
1.聲明文檔頭跟定義變量nginx
#!/usr/bin/env bashweb
maxCount=300 #php-fpm最大進程數shell
basePath=$(cd `dirname $0`; pwd) #腳本所在目錄bash
pidFilePath="$basePath/pid.conf" #pid存放文件服務器
errorFilePath="$basePath/error.txt" #錯誤日誌存放文件php7
2.定義關鍵函數函數
getDateTime(){php-fpm
date "+%Y-%m-%d %H:%M:%S"rest
}
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 #中止監聽
完整腳本下載在qq羣裏面:羣號490328630