本周刚好研究了一下dubbo的启动脚本,所以在官网的启动脚本和公司内部的启动脚本做了一个整理,弄了一份比较通过的Dubbo应用启动和停止脚本。
下面的脚本只应用于配置分离的应用,什么叫做配置分离呢?就是使用maven打包时,借助assemble插件,打一个tar.gz的压缩包。里面有三个目录。bin目录,用来存放启动与停止的脚本,lib目录,用来存放相关依赖的jar包,注意,这里每个jar包都是单独的,而不是一个大的jar包。conf目录,用来存放配置文件,包括dubbo.property,applicatiom.xml等文件。
工程解压后如下图:
本文脚本免费下载
1、启动脚本
详细的注释都已写在脚本中,请看具体的注释
直接执行上面脚本sh start.sh,输出内容如下:
到logs/stdout.log可查看详细启动过程以及失败信息等
还可以使用命令ps -ef|grep Java确定应用是否起来:
或者看Dubbo的监控页面也可查看服务是否注册上去:
2、停止
停止就更加简单了,就是根据应用名找到pid,然后kill。
sh stop.sh
执行后输出结果:
详细的输出日志可用/logs/shell.log文件查看
如果想输出dump文件,执行
sh stop.sh dump
其中dump.sh内容如下:
- #!/bin/bash
- cd `dirname $0`
- BIN_DIR=`pwd`
- cd ..
- DEPLOY_DIR=`pwd`
- CONF_DIR=$DEPLOY_DIR/conf
-
- # 如果JDK环境变量没有写到全局要添加如下几行
- # JAVA_HOME=/opt/java/jdk1.6.0_45
- # PATH=$JAVA_HOME/bin:$PATH
- # export JAVA_HOME
- # export PATH
-
- SERVER_NAME=`sed '/^app.process.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-
- if [ -z "$SERVER_NAME" ]; then
- SERVER_NAME=`hostname`
- fi
-
- PIDS=`ps -ef -ww | grep "java" | grep " -DappName=$SERVER_NAME " | awk '{print $2}'`
- if [ -z "$PIDS" ]; then
- echo "ERROR: The $SERVER_NAME does not started!"
- exit 1
- fi
-
- LOGS_DIR=$DEPLOY_DIR/logs
- if [ ! -d "$LOGS_DIR" ]; then
- mkdir -p "$LOGS_DIR"
- fi
- DUMP_DIR=$LOGS_DIR/dump
- if [ ! -d $DUMP_DIR ]; then
- mkdir $DUMP_DIR
- fi
- DUMP_DATE=`date +%Y%m%d%H%M%S`
- DATE_DIR=$DUMP_DIR/$DUMP_DATE
- if [ ! -d $DATE_DIR ]; then
- mkdir $DATE_DIR
- fi
-
- echo -e "Dumping the $SERVER_NAME ...\c"
- for PID in $PIDS ; do
- jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1
- echo -e ".\c"
- jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
- echo -e ".\c"
- jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
- echo -e ".\c"
- jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
- echo -e ".\c"
- jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
- echo -e ".\c"
- jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
- echo -e ".\c"
- jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
- echo -e ".\c"
- if [ -r /usr/sbin/lsof ]; then
- /usr/sbin/lsof -p $PID > $DATE_DIR/lsof-$PID.dump
- echo -e ".\c"
- fi
- done
-
- if [ -r /bin/netstat ]; then
- /bin/netstat -an > $DATE_DIR/netstat.dump 2>&1
- echo -e ".\c"
- fi
- if [ -r /usr/bin/iostat ]; then
- /usr/bin/iostat > $DATE_DIR/iostat.dump 2>&1
- echo -e ".\c"
- fi
- if [ -r /usr/bin/mpstat ]; then
- /usr/bin/mpstat > $DATE_DIR/mpstat.dump 2>&1
- echo -e ".\c"
- fi
- if [ -r /usr/bin/vmstat ]; then
- /usr/bin/vmstat > $DATE_DIR/vmstat.dump 2>&1
- echo -e ".\c"
- fi
- if [ -r /usr/bin/free ]; then
- /usr/bin/free -t > $DATE_DIR/free.dump 2>&1
- echo -e ".\c"
- fi
- if [ -r /usr/bin/sar ]; then
- /usr/bin/sar > $DATE_DIR/sar.dump 2>&1
- echo -e ".\c"
- fi
- if [ -r /usr/bin/uptime ]; then
- /usr/bin/uptime > $DATE_DIR/uptime.dump 2>&1
- echo -e ".\c"
- fi
-
- echo "OK!"
- echo "DUMP: $DATE_DIR"
这是dump文件
本文脚本免费下载