服务模块启动脚本-shell

#!/bin/bash

PROG=opsmanage
PID=${PROG:+$PROG.pid}

#目录名改变,脚本被链接,仍然可以准确进入脚本所在目录
cd $(dirname $(readlink -f $0))

sucess() {
    echo -e "$*\033[59G[\033[1;32m  OK  \033[0m]"
}
failed() {
    echo -e "$*\033[59G[\033[1;31m FAILED \033[0m]"
}

#函数成功:PID不存在 || 进程不存
#函数失败:PID文件不可写 || 进程已经存在
startup() { #
    #函数成功:进程存在
    #函数失败:进程不存在
    start_process() {
        nohup ./${PROG} & echo $! >${PID}
        if sleep 2 ; kill -0 `<${PID}` 2>/dev/null ;then
            sucess "Starting ${PROG}:"
        else
            failed "Starting ${PROG}:" ; exit 1
        fi
    }
    if [[ -f ${PID} ]] ;then
        if [[ -w ${PID} ]] ;then
            if [[ -L /proc/`<${PID}`/exe ]] 2>/dev/null ;then
                echo "${PROG} Already Running"
            else
                start_process
            fi
        else
            echo 'PID File: Permission denied' ; exit 1
        fi
    else
        start_process
    fi
}

#函数成功:PID文件可写 && 进程存在 && 进程属于自己
#函数失败:PID文件不存在 || 进程不存在 || 进程不属于自己
shutdown() {
    #函数成功:进程不存在
    #函数失败:进程依然存在
    stop_process() {
        kill -15 `cat ${PID} 2>/dev/null`
        if sleep 2 ; kill -0 `cat ${PID} 2>/dev/null` 2>/dev/null ;then
            failed "Stopping ${PROG}:" ; exit 1
        else
            sucess "Stopping ${PROG}:"
            rm -f ${PID}
        fi
    }
    if [[ -f ${PID} ]] ;then
        if [[ -w ${PID} ]] ;then
            if [[ -L /proc/`<${PID}`/exe ]] 2>/dev/null ;then
                if [[ -w /proc/`<${PID}`/mem ]] ;then
                    stop_process
                else
                    echo "Process: Permission denied"
                fi
            else
                echo 'Process: No such Process' ; rm -f ${PID}
            fi
        else
            echo 'PID File: Permission denied' ; exit 1
        fi
    else
        echo 'PID File: No such PID file'
    fi
}

status() {
    ps aux | awk '$11~'/${PROG}/
    #netstat -tnlp 2>/dev/null | grep ${PROG} | column -t
    if [[ -f ${PID} ]] ;then
        if [[ -w ${PID} ]] ;then
            if [[ -L /proc/`<${PID}`/exe ]] 2>/dev/null ;then
                if [[ -w /proc/`<${PID}`/mem ]] ;then
                    #stop_process
                    netstat -nlp 2>/dev/null | grep `cat ${PID} 2>/dev/null` | column -t
                else
                    echo "Process: Permission denied"
                fi
            else
                echo 'Process: No such Process' ; rm -f ${PID}
            fi
        else
            echo 'PID File: Permission denied' ; exit 1
        fi
    else
        echo 'PID File: No such PID file'
    fi
}

case "$1" in
    start)
        startup ;;
    stop)
        shutdown ;;
    restart)
        shutdown && sleep 5 && startup ;;
    status)
        status ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}" ;;
esac

posted @ 2019-07-17 10:00  运维面试辅导  阅读(173)  评论(0)    收藏  举报