很早以前我就想用脚本去重启PHP服务,不过没用,因为之前一直用的crontab任务进行定时重启就行了。
为什么会有这个需求呢?因为穷,买不起高配置服务器,程序导致服务器内存太高之后,就无法正常运行了,所以就需要清理服务器内存,清理内存有很多方法,而最有效的方式就是重启数据库或者其他web服务,但是这其中最安全的就是重启php服务了,刚好php占用又算大头,所以就一直用的重启php服务来缓解我的内存需求。
我一直用的centos系统,所以就按照我所需的写了,之前不用脚本,直接定时重启的命令:
0 */4 * * * /bin/systemctl restart php-fpm.service > /dev/null 2>&1 #每4个小时重启一次
具体重启命令根据自己的系统来,不一定就是systemctl restart php-fpm.service
然后现在就改成用脚本了,其实用脚本更麻烦,因为除了还是需要用到crontab之外,还加了内存的判断,当发现服务器可用内存低于40%的时候才重启,否则就不会重启。
脚本使用方法:
1、将脚本命令保存为restartphp.sh(命令在下面,自己按需修改了保存)
2、把脚本放进/root文件夹
3、进入root文件夹,给脚本设置为可执行文件
chmod +x restartphp.sh
4、编辑定时任务
crontab -e 0 * * * * /root/restartphp.sh #脚本每小时执行一次,也按自己的需求改时间就行
保存定时任务,重启下crontab任务。
脚本命令:
#!/bin/bash # 设置内存使用阈值 threshold=40 # 获取当前内存使用情况 total_memory=$(free | awk '/^Mem:/{print $2}') used_memory=$(free | awk '/^Mem:/{print $3}') free_memory=$(free | awk '/^Mem:/{print $4}') available_memory_percentage=$((free_memory * 100 / total_memory)) # 打印当前内存使用情况 echo "Total Memory: $total_memory kB" echo "Used Memory: $used_memory kB" echo "Free Memory: $free_memory kB" echo "Available Memory: $available_memory_percentage%" # 检查是否需要重启 PHP-FPM if [ "$available_memory_percentage" -lt "$threshold" ]; then echo "Available memory is below $threshold%. Restarting PHP-FPM..." # 根据发行版选择不同的服务名 if [ -x "$(command -v systemctl)" ]; then # CentOS 7+ systemctl restart php-fpm elif [ -x "$(command -v service)" ]; then # CentOS 6 service php-fpm restart else echo "Failed to restart PHP-FPM: Unknown service management." exit 1 fi if [ $? -eq 0 ]; then echo "PHP-FPM restarted successfully." else echo "Failed to restart PHP-FPM." fi else echo "Available memory is above $threshold%. No action needed." fi
里面的重启命令,根据你自己的实际系统来,就是换掉:systemctl restart php-fpm或者service php-fpm restart