`
zhengdl126
  • 浏览: 2538653 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

monitor.sh监控进程并重启拉起

 
阅读更多

 

比如在服务器开启了php死循环程序,为了防止php进程僵死或挂掉,需要sh监控进程并重启拉起。

当日志记录时间超过5分钟就kill重启拉起

 

 

 

 

#!/bin/bash
#
# 请使用crontab -e 来输入命令每隔一定时间调用本程序
# */1 * * * * /bin/sh /var/www/test
/protected/commands/shell/monitor.sh
#
#日志文件
LOG_DATE=`date +%Y-%m-%d`
LOG_PATH="/var/www/logs/monitor_${LOG_DATE}.log"
run_php_path="/usr/local/php/bin/php"

if [[ $0 = \* ]]
then 
   curfile="$0"
else  
   curfile="$PWD/${0#./}"
fi
php_path=`dirname $curfile`
#yiicmd.php所在目录


phpCmdDir=`dirname $php_path`


#yii命令行都是执行此php
phpCmdName="yiicmd.php"


# 配置监控的程序及对应的监控频率时间及允许启动的线程数
shconfig[0]="drawresult"
shtime[0]=600
shconfig[1]="kkdrawresult"
shtime[1]=600





LOG_START_TIME=`date +'%Y-%m-%d %H:%M:%S'`
echo " " >> $LOG_PATH 
echo "monitor.sh run start...... time : $LOG_START_TIME" >> $LOG_PATH 


#下面这里不用改路径
IP=`ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`

#当前进程数
MAX_THREAD=4
CUR_THREAD=0
CUR_SERVER=0

# 循环取配置的各个进程一个个检查并关闭
i=0
for index in "${shconfig[@]}"
do

    echo "check ${phpCmdDir} ${phpCmdName} ${index} thread......" >> $LOG_PATH 
    #线程数
    # 判断是不是有重复进程,保证一台电脑上只有一个进程
	counter=`ps -ef | grep "${phpCmdDir}${phpCmdName} ${index}" | grep -v grep | wc -l`
	if [ $counter -gt 1 ]; then
		echo "kill mulithreed ${phpCmdDir}${phpCmdName} ${index}" >> $LOG_PATH 
		ps -ef | grep "${phpCmdDir}${phpCmdName} ${index}" | grep -v "grep" | awk '{print $2}'|xargs kill
		sleep 1
	fi
	
	#检查进程 拉起进程


	if [ $counter -eq 0 ]; then
		echo "run  ${phpCmdDir}${phpCmdName} ${index}

" >> $LOG_PATH 
		${run_php_path} ${phpCmdDir}${phpCmdName} ${index} &
		continue 1
	fi

    last_time=`date +%s`
    FILENAME="/var/www/logs/${index}${CUR_THREAD}.time"
    echo  "${FILENAME}" >>$LOG_PATH 
    if [ -e $FILENAME ]
    then
        last_time="`cat ${FILENAME}`"
    else
        last_time=0
    fi

    if [ -z $last_time ]
    then
      last_time=0
    fi
    current_time=`date +%s`
    let "diff_time = current_time - $last_time "
    echo "${current_time} ${last_time} = ${diff_time} > ${shtime[i]}" >> $LOG_PATH

    # 如果时间超过50秒,重启
    if [ "$diff_time" -ge "${shtime[i]}" ]
       then

        # 关闭此进程    
        echo "stop $index......" >> $LOG_PATH 
        chpid="`cat /var/www/logs/${index}.sid`";
        kill $chpid;
		
        echo "kill ${phpCmdDir}${phpCmdName} ${index} done!" >> $LOG_PATH 
        ps ax|grep "${phpCmdDir}${phpCmdName} ${index}" |grep -v grep|awk '{print $1}'|xargs kill
		
        # 休眠两秒后再启动服务
        sleep 2
        echo "restart ${phpCmdDir}${phpCmdName} ${index}......" >> $LOG_PATH 
        echo "${run_php_path} ${phpCmdDir}${phpCmdName} ${index}" >> $LOG_PATH 
        
        ${run_php_path} ${phpCmdDir}${phpCmdName} ${index} &
        sleep 1
        
        shpid="$!";
        echo "$shpid" > /var/www/logs/${index}.sid		
        echo "success restart $index......" >> $LOG_PATH 
    fi
    i=$(($i+1))
done
LOG_END_TIME=`date +'%Y-%m-%d %H:%M:%S'`
echo "monitor.sh run end......time: $LOG_END_TIME" >> $LOG_PATH 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    monitor.sh

    检索 Apache Tomcat 日志中是否包含关键字,包含则重启 Tomcat。 1. 利用 Grep 检索; 2. 利用 Apache Tomcat Startup.sh 和 Shutdown.sh 脚本实现重启。

    Linux系统监控shell程序包-含内存cpu硬盘监控进程监控进程守护删除过期日志url监控webservice监控

    sysWeblogicMonitorRestart.sh:系统weblogic监控重启(守护进程),当weblogic进程停止时调用脚本(startPssc.sh)自动重启 startPssc.sh:重启weblogic并生成带日期的日志文件 sh\utils:工具文件夹 ...

    monitor.io, socket.io的远程监视和调试.zip

    monitor.io, socket.io的远程监视和调试 monitor.io简单的远程监控和调试中间件 monitor.io 是作为远程服务器运行的node.js的MODULE,它提供远程客户端控制和有关连接到一个 socket.io 实例的套接字的信息。...

    SQLMonitor.rar 监控oracle sql

    "SQLMonitor.rar" 提供了一种解决方案,专为监控Oracle SQL查询而设计,这对于优化数据库性能、排查错误以及确保系统稳定运行是极其有用的。在这个压缩包中,我们主要关注的是如何利用SQLMonitor工具来提升对Oracle ...

    Process Monitor.vi

    用于Labview的进程监控子VI,在高版本的中文版Labview中,不易查找

    非常好用的串口监控软件serial-monitor.exe

    在本文中,我们将深入探讨“serial-monitor.exe”这款被描述为“非常好用”的串口监控软件,以及它在IT领域的应用。 首先,串口(Serial Port)是一种传统的通信接口,用于设备间的数据传输,常见的串口标准有RS-...

    进程分析工具ProcessMonitor.zip

    进程分析是IT领域中至关重要的一个环节,它帮助我们理解系统资源的...不过要注意,由于其监控的详细程度,长时间开启Process Monitor可能会对系统性能造成影响,因此在日常使用中应根据需要开启并设置适当的过滤规则。

    LABVIEW过去版本自带的例程Process Monitor.vi, 看到大家下载都要几十分, 无语中...

    在第一章第8页的例1中,这个例程可能详细地解释了如何创建和运行一个监控进程的程序。在框图页面,用户可以通过右键点击并选择"Select VI"(在菜单的底部)来调用这个例程,这是一个基本的LabVIEW操作,用于在程序中...

    任务栏流量监控TrafficMonitor.zip

    1. ** TrafficMonitor.exe**:这是主程序文件,执行后会在系统任务栏托盘区显示一个图标,通过这个图标用户可以随时查看当前网络的上传和下载速度,以及累计流量信息。它通常会在后台运行,占用系统资源低,不影响...

    SQLMonitor.exe

    SQLMonitor.exe SQLMonitor.exe

    log_monitor日志监控

    (1) 二进制包:下载工具包 log_monitor.tar.gz,并解压 (2) 源码编译:make 之后进行参数配置,可以拷贝现有的,各个参数说明如下: log_file=/data/nginx_logs/access.log log_reg=\[(.*) \+0800\] time_format=%d/%b/%Y:...

    Solaris pstack.sh

    pcore.sh (0.1) - miniture version of pstack.sh for Solaris, until we work out access to dbx. Note 1: packcore.sh (0.1) - bundle core file and libraries for Oracle Tech Support pstack.sh (0.4) - uses ...

    ProcessMonitor.zip

    标题中的"ProcessMonitor.zip"表明这是一个包含ProcessMonitor工具的压缩文件。通过解压缩,我们可以看到几个关键文件:`procmon.chm`是帮助文档,提供了关于如何使用ProcessMonitor的详细信息;`Procmon.exe`是32位...

    process monitor.vi 进程监视器

    进程监视器,直接导入,老版本中在activity目录下,labview2009找不到了,直接下载

    Process Monitor.vi LABVIEW

    NI Process Monitor.vi LABVIEW

    nginx_monitor.sh

    nginx_monitor

    通达控制中心 Monitor.exe

    Monitor.exe程序的破%解%工具,执行前,请先手工停掉通达的所有服务,否则可能写入不成功! 该工具原理:向Monitor.exe反汇编改写检测代码,直接跳过检测,达到显示加密锁目的。 本工具只适用于某站会员交流应用,...

    Process_Monitor.rar_LABVIEW进程_labview process_process monitor.v

    labview中的一个自带的子函数,在以前系统上有,现在没有了!用于进程监控!

    NetworkMonitor.dll

    获取网卡,并且测数的数据集,引入名称为【using Echevil;】

Global site tag (gtag.js) - Google Analytics