现在很多应用场景都会需要使用守护进程直接运行代码,会有情况导致出现异常进程退出,那就很影响用户使用了,这里提供一个简单的linux进程监控和重启来保证进程正常运行。
脚本文件
该脚本实现了一个检测进程是否存在,不存在的情况下重启进程并且记录日志。
#! /bin/sh
proc_name="console/queue/gift.php" # 进程名
log_name="/data/log/watch_queue.log" # 日志文件
pid=0
proc_num() # 计算进程数
{
num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
return $num
}
proc_id() # 进程号
{
pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
}
proc_num
number=$?
if [ $number -eq 0 ] # 判断进程是否存在
then
/usr/local/php/bin/php /PATH/gift.php& # 重启进程的命令,请相应修改
proc_id # 获取新进程号
echo ${pid}, `date` >> $log_name # 将新进程号和重启时间记录
fi
crontab
利用定时任务来轮询执行脚本
*/1 * * * * /PATH/watch_queue.sh
总结
这是一个简单但又实用的一个监控方式,博主曾经在直播平台的礼物队列等场景应用过,在rango的《swoole服务器如何做到无人值守100%可用》内也使用了这个建议。当然也有它的缺点,比如这样的监控脚本多了之后管理不便,没有一些工具提供更全面的监控。
方法总有适合的场景,为合适的场景选择合适的方法才是关键