系统相关
首页 > 系统相关> > 程序守护进程shell脚本编写

程序守护进程shell脚本编写

作者:互联网

程序守护进程shell脚本编写

 

#! /bin/bash
#################################################
# 文件名:hcicloud_monitor.sh
# desc: a tool for checking service running status for every $interval seconds. Restart service when detect program shut down.
# 注意 需要正确设置启动环境检测内容 脚本检测到进程异常时 会先检查依赖环境是否就绪 依赖环境就绪时才会拉起监控的进程
VERSION="1.0.6"                 #版本号
MODIFIED_TIME="2018/03/08"  #修改时间
DEPLOY_UNION="cloud"        #部署单元
EDITER_MAIL="wangyu1@sinovoice.com.cn"     #编写人邮箱 
#################################################

#============================================================================================
#确认脚本执行时是否带有监控程序名称 和 服务编码参数
#============================================================================================
if [ "$#" -lt 1 ]
then
    echo "Usage: $0 program_name"
    exit -1;
fi

# 休息间隔时间设置 单位为秒
INTERVAL=5


# PROGRAM 为要守护的可执行程序
# 第一个参数是被守护的进程
PROGRAM="$1"


#============================================================================================
#发现服务宕机后,要做的动作:记录时间,打包文件,重启服务。
#============================================================================================
ARG_01=$1
action1()
{
    pushd $(pwd)        

    #重启出现问题的服务
    ./$PROGRAM -d
    popd
}


#===========================================================================================

echo "monitor_check is checking......"


#-------------------------------------------------------------------------------------------

#============================================================================================
# main program
#============================================================================================

# 当前休息间隔时间
cur_interval=$INTERVAL
# 拉起服务尝试次数计数
try_times=1

while true
do    
    #查看目标进程是否在运行
    PRO_NOW=`ps -ef ${my_user_name} | grep -w "$PROGRAM " | grep -v grep | grep -v gdb | wc -l`
    if [ $PRO_NOW -eq 0 ]
    then
        # 若拉起服务失败 每次增加等待时间 重试时间间隔成指数增长(1.5、3、6、12、24、48、64、...秒)
        if [ $try_times -gt 1 ];then
            cur_interval=$[cur_interval*2]
        fi
        echo "`date +"%Y-%m-%d %H:%M:%S"`, $PROGRAM is not running now, try_times = $try_times, cur_interval = $cur_interval" >> $HOME/cloud/bin/nohup.out
        let try_times++;
        action1
    else
        # 拉起服务成功 重置尝试次数
        try_times=1
        cur_interval=$INTERVAL
    fi
    
    #每隔一段时间执行查看一次进程是否存在
    sleep $cur_interval

done
exit 0

 

启动守护进程方法

/qhapp/ta/cloud/text_analyze/bin/hcicloud_monitor.sh

/qhapp/ta/cloud/text_analyze/bin/servicfx_text_analyze -d

./hcicloud_monitor.sh 应用程序名称 servicfx_text_analyze

这个守护进程会每隔5秒去检查一次应用程序进程。

如果发现程序进程不存在,就会自动拉起应用servicfx_text_analyze。

如果第一次,自动拉起应用servicfx_text_analyze失败,就会在5秒的基础上增加1.5秒后重新拉起应用程序。没失败一次就在5秒的基础上时间间隔成指数增长(1.5、3、6、12、24、48、64、...秒)。

 

#! /bin/bash

#################################################

# 文件名:hcicloud_monitor.sh

# desc: a tool for checking service running status for every $interval seconds. Restart service when detect program shut down.

# 注意 需要正确设置启动环境检测内容 脚本检测到进程异常时 会先检查依赖环境是否就绪 依赖环境就绪时才会拉起监控的进程

VERSION="1.0.6"                 #版本号

MODIFIED_TIME="2018/03/08"  #修改时间

DEPLOY_UNION="cloud"        #部署单元

EDITER_MAIL="wangyu1@sinovoice.com.cn"     #编写人邮箱

#################################################

 

#============================================================================================

#确认脚本执行时是否带有监控程序名称 和 服务编码参数

#============================================================================================

if [ "$#" -lt 1 ]

then

    echo "Usage: $0 program_name"

    exit -1;

fi

 

# 休息间隔时间设置 单位为秒

INTERVAL=5

 

 

# PROGRAM 为要守护的可执行程序

# 第一个参数是被守护的进程

PROGRAM="$1"

 

 

#============================================================================================

#发现服务宕机后,要做的动作:记录时间,打包文件,重启服务。

#============================================================================================

ARG_01=$1

action1()

{

pushd $(pwd)        

 

#重启出现问题的服务

./$PROGRAM -d

popd

}

 

 

#===========================================================================================

 

echo "monitor_check is checking......"

 

 

#-------------------------------------------------------------------------------------------

 

#============================================================================================

# main program

#============================================================================================

 

# 当前休息间隔时间

cur_interval=$INTERVAL

# 拉起服务尝试次数计数

try_times=1

 

while true

do

    #查看目标进程是否在运行

    PRO_NOW=`ps -ef ${my_user_name} | grep -w "$PROGRAM " | grep -v grep | grep -v gdb | wc -l`

    if [ $PRO_NOW -eq 0 ]

    then

        # 若拉起服务失败 每次增加等待时间 重试时间间隔成指数增长(1.5、3、6、12、24、48、64、...秒)

        if [ $try_times -gt 1 ];then

            cur_interval=$[cur_interval*2]

        fi

        echo "`date +"%Y-%m-%d %H:%M:%S"`, $PROGRAM is not running now, try_times = $try_times, cur_interval = $cur_interval" >> $HOME/cloud/bin/nohup.out

        let try_times++;

     action1

    else

        # 拉起服务成功 重置尝试次数

        try_times=1

        cur_interval=$INTERVAL

    fi

    

    #每隔一段时间执行查看一次进程是否存在

    sleep $cur_interval

 

done

exit 0

标签:shell,cur,interval,times,try,PROGRAM,进程,编写,守护
来源: https://www.cnblogs.com/xiedy001/p/16307722.html