Shell 스 크 립 트 는 프로 세 스 의 자동 당 김 을 실현 합 니 다.

8017 단어
스 크 립 트 를 사용 하여 프로 세 스 가 실행 중인 지 확인 하고, 그렇지 않 으 면 프로 세 스 를 시작 합 니 다.
주요 사고방식: 프로 세 스 이름 에 따라 찾기 (물론 두 개의 이름 이 같은 프로 세 스 가 있 으 면 안 됩 니 다). ps + grep 로 프로 세 스 가 존재 하 는 지 확인 하고, 현재 스 크 립 트 의 프로 세 스 를 grep - v 로 필터 해 야 합 니 다. (이 프로 세 스 의 경로 가 이 스 크 립 트 에 매개 변수 로 전달 되 기 때 문 입 니 다.) 그리고 grep 명령 으로 생 성 된 하위 프로 세 스 를 필터 해 야 합 니 다.(셸 에서 명령 을 실행 할 때 fork 를 호출 하여 하위 프로 세 스 를 만 든 다음 exec 로 프로 세 스 의 이미 지 를 바 꿉 니 다)
프로 세 스 를 다시 시작 할 때 실행 가능 한 파일 을 직접 시작 합 니 다: $process path &
셸 스 크 립 트 를 시작 하려 면: sh $process path &
프로 세 스 를 시작 한 후에 프로 세 스 가 성공 적 으로 시작 되 었 는 지 다시 확인 할 수 있 습 니 다.
마지막 으로 crontab 를 추가 하면 스 크 립 트 를 정시 에 실행 할 수 있 습 니 다. 프로 세 스 가 실행 되 지 않 은 것 을 발견 하면 프로 세 스 를 시작 합 니 다. 그러면 프로 세 스 가 자동 으로 끌 어 올 립 니 다.
crontab - l\# 작업 보기
crontab - e\# 작업 편집
crontab - r\# 사용자 의 crontab 내용 삭제
스 크 립 트 를 1 분 에 한 번 씩 실행 합 니 다:
*/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

 
다음으로 전송:https://www.cnblogs.com/-Lei/archive/2013/04/21/3033788.html

좋은 웹페이지 즐겨찾기