ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

程序守护进程shell脚本编写

2022-05-25 00:04:37  阅读:229  来源: 互联网

标签:shell cur interval times try PROGRAM 进程 编写 守护


程序守护进程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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有