:

Linux 监测进程脚本

song100e 发布于:2020-9-11 8:43 分类:PHP  有 34 人浏览,获得评论 0 条 标签: swoole 

    这里以监测 swoole 的 socket 进程为例。
    在某些情况下,如系统负载过大 swoole 无法申请到内存而挂掉、swoole 底层发生段错误、Server 占用内存过大被内核 Kill,或者被某些程序误杀。那 websocket-server 将无法提供服务,导致业务中断,公司收入出现损失。
    有一个非常有效并且在 BAT 等大型公司常用的方案是 crontab 重启监控。
原理是每 1 分钟执行一次 shell 脚本,检测 swoole 的 websocket-server 进程是否存活,如果存在则跳过。如果发现主进程已经挂掉,则执行 restart 逻辑,先 kill 掉所有残留的子进程,然后重新启动 Server。

在系统的crontab中加入:

*/1 * * * * /data/script/check_socket.sh

/data/script/check_socket.sh:

#!/bin/bash
count=`ps -fe |grep "websocket-server/start" | grep -v "grep" | wc -l`
echo $count
if [ $count -lt 4 ]; then
	if [ $count -gt 0 ]; then
		ps -eaf |grep "websocket-server/start" | grep -v "grep"| awk '{print $2}'|xargs kill -9
		sleep 2
	fi
	ulimit -c unlimited
	/usr/local/php/bin/php $(pwd)/yii websocket-server/start
	echo "restart";
	echo $(date +%Y-%m-%d_%H:%M:%S) > $(pwd)/swoole_restart.log
fi

当然还有其他思路以及改进的地方,这里不再叙述。

赞助我,共同学习进步!