Dubbo应用启动与停止脚本,超详细解析

本文详细解析了适用于配置分离的Dubbo应用的启动和停止脚本。脚本适用于通过maven assemble插件打包成包含bin、lib、conf目录的tar.gz包的应用。启动脚本带有详细注释,日志输出到stdout.log,可通过ps命令检查进程状态或Dubbo监控页面查看服务注册。停止脚本通过查找pid进行kill操作,日志记录在shell.log,加参数'dump'可生成dump文件。
摘要由CSDN通过智能技术生成

        本周刚好研究了一下dubbo的启动脚本,所以在官网的启动脚本和公司内部的启动脚本做了一个整理,弄了一份比较通过的Dubbo应用启动和停止脚本。

         下面的脚本只应用于配置分离的应用,什么叫做配置分离呢?就是使用maven打包时,借助assemble插件,打一个tar.gz的压缩包。里面有三个目录。bin目录,用来存放启动与停止的脚本,lib目录,用来存放相关依赖的jar包,注意,这里每个jar包都是单独的,而不是一个大的jar包。conf目录,用来存放配置文件,包括dubbo.property,applicatiom.xml等文件。

工程解压后如下图:

本文脚本免费下载

1、启动脚本

详细的注释都已写在脚本中,请看具体的注释

 

#!/bin/bash
cd `dirname $0`

#当前路径
BIN_DIR=`pwd`

#向上一层路径
cd ..
DEPLOY_DIR=`pwd`
echo $DEPLOY_DIR

#配置文件路径
CONF_DIR=$DEPLOY_DIR/conf
#日志输出路径
LOGS_DIR=$DEPLOY_DIR/logs

# 如果JDK环境变量没有写到全局要添加如下几行
# JAVA_HOME=/opt/java/jdk1.6.0_45
# PATH=$JAVA_HOME/bin:$PATH
# export JAVA_HOME
# export PATH

#从dubbo.properties取得应用名、端口号,端口名
SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
SERVER_PROTOCOL_NAME=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
SERVER_PROTOCOL_PORT=`sed '/dubbo.protocol.port/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`

#应用名为空的话就取当前系统名
if [ -z "$SERVER_NAME" ]; then
    echo "SERVER_NAME is empty"
    SERVER_NAME=`hostname`
fi

#根据配置文件路径去查找当前是否已有dubbo应用启动起来
APP_PID=`ps -ef -ww | grep "java" | grep " -DappName=$SERVER_NAME " | awk '{print $2}'`
echo "SERVER_NAME: $SERVER_NAME"
echo "SERVER_PROTOCOL_NAME: $SERVER_PROTOCOL_NAME"
echo "SERVER_PROTOCOL_PORT: $SERVER_PROTOCOL_PORT"
echo "APP_PID: $APP_PID" 

#APP_PID不为空,说明应用已启动,直接退出
if [ -n "$APP_PID" ]; then
    echo "ERROR: The $SERVER_NAME already started!"
    echo "PID: $APP_PID"
    exit 1
fi

#检查端口是否被占用
if [ -n "$SERVER_PROTOCOL_PORT" ]; then
    SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PROTOCOL_PORT | wc -l`
    if [ $SERVER_PORT_COUNT -gt 0 ]; then
        echo "ERROR: The $SERVER_NAME port $SERVER_PROTOCOL_PORT already used!"
        exit 1
    fi
fi


#如果logs目录不存在,就创建一个
if [ ! -d $LOGS_DIR ]; then
    mkdir $LOGS_DIR
fi

echo "LOGS_DIR :$LOGS_DIR"

#控制台日志输出收集位置
STDOUT_FILE=$LOGS_DIR/stdout.log

#依赖jar包目录
LIB_DIR=$DEPLOY_DIR/lib

#将上面的jar文件名称,拼接上lib的路径然后输出
LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "\n" ":"`

#-DappName指定应用名
JAVA_OPTS="-DappName=$SERVER_NAME -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Ddubbo.shutdown.h
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值