Fork me on GitHub

Shell脚本实现进程的自动拉起

使用脚本检查某个进程是否在运行,若否,则启动该进程。

主要思路:根据进程名进行查找(当然如果有两个名字一样的进程就不行了),用ps + grep检查进程是否已经存在,同时要注意用grep -v过滤掉当前脚本的进程(因为该进程的路径会作为参数传给这个脚本),还有要过滤掉grep命令产生的子进程(在shell中执行命令时会调用fork产生一个子进程,然后用exec更换进程的映象)

注意重启进程时直接启动了一个可执行文件:$process_path &

如果要启动的是shell脚本的话,可以使用:sh $process_path &

启动完进程之后可以再检查一下进程是否已经成功启动了。

最后,如果再加上crontab,就可以让脚本定时执行,一旦发现进程没有运行,则启动该进程,这样就实现了进程的自动拉起。

crontab -l #查看你的任务
crontab-e#编辑你的任务
crontab-r#删除用户的crontab的内容

让脚本每一分钟运行一次:

*/1 * * * * /home/xxx/proc_monitor.sh  /home/xxx/demo &

下面是自动拉起的脚本:

#!/bin/bash
# name:proc_monitor.sh
# 作用:监控程序,若程序被kill,则自动拉起程序

# 脚本的名字,用以在查找进程时过滤掉当前脚本的进程
script_name="proc_monitor.sh"

# 检查文件是否存在
# @param $1:要监控的程序的目录
function check_file()
{
    if [ $# -ne 1 ]; then
        echo "参数错误,正确使用方法: check_file /dir/file"
        return 1;
    fi

    if [ ! -f $1 ];then
        echo "文件 $1 不存在"
        return 1
    fi
}


# return 0:进程没有运行 1:进程已运行
# @param $1:要监控的程序的目录
function monitor_process()
{
    if [ $# -ne 1 ]; then
        echo "参数错误,正确使用方法:monitor_process /dir/file"
        return 1
    fi

    process_exists=$(ps -ef | grep $1 | grep -v grep | grep -v $script_name | wc -l)
    
    if [ $process_exists -eq 0 ]; then
        return 0
    else
        return 1
    fi
}


# 启动监控程序
# @param $1:要监控的程序的目录function start_monitor()
{
    if [ $# -ne 1 ]; then
        echo "参数错误,正确使用方法:start_monitor /dir/file"
        return 1
    fi

    process_path=$1
    process_name=$(echo $process_path | awk -F / '{print $NF}')
    
    monitor_process $process_name
    if [ $? -eq 0 ]; then
        echo "该进程没有运行:$process_path"
        echo "现将启动进程"

        $process_path &
        #sh $process_path &
        
        monitor_process $process_name
        if [ $? -eq 1 ]; then
            echo "重启进程成功"
        else
            echo "重启进程失败"
        fi
     else
        echo "进程已经启动"
     fi   
}


# 主程序
# @param $1:要监控的程序的目录
if [ $# -ne 1 ]; then
    echo "参数错误,正确使用方法:ecdata_proc_monitor /dir/file"
    exit 1
fi

check_file $1
if [ $? -ne 0 ]; then
    exit 1
fi

start_monitor $1

 

posted @ 2013-04-21 12:29  _Lei  阅读(6283)  评论(0编辑  收藏  举报