自定义服务运行管理命令

启动服务有 servcie <service-name> start 和 systemctl start <service-name> 两个命令,两种形式。正好,我有时候有启动服务,有时候想启动命令,借鉴这两种命令格式。

其中,start 会自动 resart,当然,通用服务都是用 service 命令启动,所以也支持 restart 动作,只是自定义的启动命令,我只用了 start 和 stop 两个动作。

####################################################################################
# 服务运行两种命令形式,如:
# srv <name> [start]|stop 表示启动/停止服务
# srv start|stop <name> 表示启动/停止 dokcer 容器
####################################################################################
function srv(){

    case "$1" in
        'php')
            case "$2" in
                'start')  srv php stop 1>/dev/null 2>&1; sudo php-fpm;;
                'stop')   sudo pkill -9 php-fpm;;
                *)        srv php start;;
            esac 
        ;;
        'nginx')   
            case "$2" in    
                'start')  srv nginx stop 1>/dev/null 2>&1; sudo nginx;;
                'stop')   sudo nginx -s stop;;
                *)        srv nginx start;;
            esac
        ;;
        'web')  srv php start; srv nginx start;;

        'start'|'stop')
            [ -z "$2" ] && { srv docker "$1"; }
            [ "$2" == "all" ] && set -- $1 $(docker ps -qf status=exited)

            [ -n "$2" ] && {
              [ "$1" == 'start' ] && docker stop "$2" 1>/dev/null 2>&1
              docker "$@"
            }
        ;;
        *)  
            [ "$1" == 'mysql' ] && { shift 1; set -- mysqld $@; }
            [ $# == 1 ] && set -- $1 'start'
            [ "$2" == 'start' ] && sudo service "$1" stop 1>/dev/null 2>&1
            sudo service "$@"
        ;;        
    esac

}


####################################################################################
# 同时启动多个服务如:
# start php nginx mysql 表示启动服务
# start -c php nginx mysql 选项 -c 表示启动的是容器
####################################################################################
function start(){
    local c=0
    [ "$1" == '-c' ] && { c=1; shift 1; }
    [ -z "$1" ] && set -- docker
    for item in "$@";do
        if [ "$c" == 1 ];then
            srv start $item
        else
            srv $item start
        fi
    done
}

####################################################################################
# 同时停止多个服务如:
# stop php nginx mysql 表示停止服务
# stop -c php nginx mysql 选项 -c 表示停止的是容器
####################################################################################
function stop(){
    local c=0
    [ "$1" == '-c' ] && { c=1; shift 1; }
    [ -z "$1" ] && set -- docker
    for item in "$@";do
        if [ "$c" == 1 ];then
            srv stop $item
        else
            srv $item stop
        fi
    done
}
原文地址:https://www.cnblogs.com/zbseoag/p/14321267.html