zoukankan      html  css  js  c++  java
  • shell 实战 -- 基于一个服务启动,关闭,状态检查的脚本

    功能说明:

    • check:检查服务状态,在开启,关闭,状态检查时都会用到这个函数,所以封装起来放到最前面
    • start:开启服务
    • stop:关闭服务
    • fstop:强制关闭
    • status:检查服务状态
    • running:查看所有正在运行的状态

    使用说明:

    开启服务:

    启动一个进程监听 9000(默认)端口:

    • sh standard_server.sh start

    启动一个进程监听 8000(自定义)端口:

    • 格式: sh standard_server.sh start ipaddress port
    • sh standard_server.sh start 10.10.4.200 8000


    关闭服务:

    关闭监听 9000(默认)端口:

    • sh standard_server.sh stop

    关闭监听 8000(自定义)端口:

    • 格式: sh standard_server.sh stop ipaddress port
    • sh standard_server.sh stop 10.10.4.200 8000


    查看监听状态:

    查看 9000 端口(默认)监听状态:

    • sh standard_server.sh status

    查看 8000端口(自定义)监听状态:

    • 格式: sh standard_server.sh status ipaddress port
    • sh standard_server.sh status 10.10.4.200 8000

    查看所有正在监听端口:

    • sh standard_server.sh running

    代码部分:

    #!/bin/bash
    # author: ck
    
    check()
    {
        if (($(ps aux|grep manage.py| grep "${port:-9000}" |grep -v grep|wc -l) == 0));then
            # stopped
            return 1;
        else
            # running
            return 0;
        fi
    }
    
    start()
    {
        check
        if (($? == 1));then
            echo -n "standard server ${port:-9000} to start......"
            path=$(dirname $0)
            if [[ $path != '.' ]];then
                cd $path
            fi
            # nohup /home/seemmo/share/python/centos/python3.6.6/bin/python3 manage.py start_server -h "${host:-0.0.0.0}" -p "${port:-9000}" -k wf >nohup.out 2>&1 &
            nohup python3 manage.py start_server -h "${host:-0.0.0.0}" -p "${port:-9000}" -k wf >nohup.out 2>&1 &
            while true
            do
                check
                if (($? == 1));then
                    echo -n '...'
                    sleep 1
                else
                    echo -e '33[32mstarted33[1m33[0m'
                    break
                fi
            done
        else
            echo "standard server ${port:-9000} has been running!!!"
        fi
    }
    
    fstop()
    {
        check
        if (($? == 1));then
            echo "standard server ${port:-9000} has been stopped!!!"
        else
            echo -n "standard server ${port:-9000} force to stop....."
            ps aux|grep manage.py |grep "${port:-9000}" |grep -v grep|awk '{print $2}'|xargs kill -9
            while true
            do
                check
                if (($? == 1));then
                    echo -e '33[32mstopped33[1m33[0m'
                    break
                else
                    echo -n '...'
                    sleep 1
                fi
            done
        fi
    }
    
    stop()
    {
        check
        if (($? == 1));then
            echo "standard server ${port:-9000} has been stopped!!!"
        else
            echo -n "standard server ${port:-9000} to stop....."
            spid=1
            tp_list=($(ps aux|grep manage.py |grep "${port:-9000}" |grep -v grep|awk '{print $2}'|xargs))
            for tpid in ${tp_list[@]}
            do
                if ((spid == 1));then
                    spid=$tpid
                elif ((tpid < spid));then
                    spid=$tpid
                fi
            done
            kill -15 $spid
            retry_time=3
            while true
            do
                if ((retry_time == 0));then
                    echo
                    fstop
                    break
                fi
                check
                if (($? == 1));then
                    echo -e '33[32mstopped33[1m33[0m'
                    break
                else
                    ((retry_time=retry_time-1))
                    echo -n '.'
                    sleep 1
                fi
            done
        fi
    }
    
    status()
    {
        check
        if (($? == 1));then
            echo -e "standard server ${port:-9000} now is 33[32mstopped33[1m33[0m"
        else
            echo -e "standard server ${port:-9000} now is 33[32mrunning33[1m33[0m"
        fi
    }
    
    running()
    {
        port_list=$(ps aux | grep "manage.py" | grep -v "grep" |awk '{print $17}' |xargs)
        for port in ${port_list}
        do
            echo -e "standard server ${port} now is 33[32mrunning33[1m33[0m"
        done
    }
    
    restart() {
        check
        if (($? == 1));then
            start
        else
            stop
            while true
            do
                check
                if (($? == 1));then
                    start
                    break
                else
                    sleep 1
                fi
            done
        fi
    }
    
    if (($# == 1)) || (($# == 3));then
        if (($# == 3));then
            host=$2
            port=$3
        fi
    
        case $1 in
            start|stop|status|restart|fstop|running)
                $1
                ;;
            *)
                if (($# == 1));then
                    echo "Usage: bash $0 {start|stop|status|restart|fstop|running}"
                    exit 2
                else
                    echo "Usage: bash $0 {start|stop|status|restart|fstop|running} host port"
                    exit 2
                fi
        esac
    
    else
        echo "Usage: bash $0 {start|stop|status|restart|fstop|running} host port"
        exit 2
    fi

    ending ~

    每天都要遇到更好的自己.
  • 相关阅读:
    PHP 求多个数组的笛卡尔积,适用于求商品规格组合 【递归思想, 类似广度优先搜索】【原创】
    CCF推荐期刊会议
    SCI分区
    值和指针接收者的区别
    程序员练级攻略
    保险
    golang 有缓冲channel和无缓冲channel
    后台学习路线
    golang之反射
    atomic和mutex
  • 原文地址:https://www.cnblogs.com/kaichenkai/p/11224152.html
Copyright © 2011-2022 走看看