From 8b9320d9db984f2dd37bff25a8a71230ea1e1e7b Mon Sep 17 00:00:00 2001 From: shaozhuguang Date: Mon, 26 Oct 2020 11:14:40 +0800 Subject: [PATCH] modify shell of startup and shutdown --- core | 2 +- .../gateway/boot/GatewayBooter.java | 36 ------ .../src/main/resources/scripts/shutdown.sh | 91 +++++++++----- .../src/main/resources/scripts/startup.sh | 112 ++++++++++++++--- .../jd/blockchain/boot/peer/PeerBooter.java | 24 ---- .../main/resources/scripts/peer-shutdown.sh | 91 +++++++++----- .../main/resources/scripts/peer-startup.sh | 116 +++++++++++++++--- explorer | 2 +- libs/bft-smart | 2 +- 9 files changed, 327 insertions(+), 149 deletions(-) diff --git a/core b/core index c770f544..d55343ab 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit c770f544e9892b4cc2e937a336abf59a40fc198a +Subproject commit d55343ab297329f9476d7fa1494ebb4c9c5fd878 diff --git a/deploy/deploy-gateway/src/main/java/com/jd/blockchain/gateway/boot/GatewayBooter.java b/deploy/deploy-gateway/src/main/java/com/jd/blockchain/gateway/boot/GatewayBooter.java index 4c9d5537..82413a65 100644 --- a/deploy/deploy-gateway/src/main/java/com/jd/blockchain/gateway/boot/GatewayBooter.java +++ b/deploy/deploy-gateway/src/main/java/com/jd/blockchain/gateway/boot/GatewayBooter.java @@ -15,45 +15,9 @@ public class GatewayBooter { public static void main(String[] args) { try { - writePID(); GatewayServerBooter.main(args); } catch (Exception e) { System.err.println("Error!!! --[" + e.getClass().getName() + "] " + e.getMessage()); } } - - private static final void writePID() throws Exception { - URL url = GatewayBooter.class.getProtectionDomain().getCodeSource().getLocation(); - String currPath = java.net.URLDecoder.decode(url.getPath(), "UTF-8"); - if (currPath.contains("!/")) { - currPath = currPath.substring(5, currPath.indexOf("!/")); - } - if (currPath.endsWith(".jar")) { - currPath = currPath.substring(0, currPath.lastIndexOf("/") + 1); - } - System.out.printf("currentPath = %s \r\n", currPath); - File file = new File(currPath); - String homeDir = file.getParent(); - String pidFilePath = homeDir + File.separator + "bin" + File.separator + "PID.log"; - File pidFile = new File(pidFilePath); - if (!pidFile.exists()) { - File dir = pidFile.getParentFile(); - if (!dir.exists()) { - dir.mkdirs(); - } - pidFile.createNewFile(); - } - String name = ManagementFactory.getRuntimeMXBean().getName(); - String pid = name.split("@")[0]; - List bootInfos = new ArrayList<>(); - bootInfos.add("JDChain gateway starts to boot ......\r\n"); - bootInfos.add(String.format("GW_BOOT_TIME = [%s] \r\n", new Date().toString())); - bootInfos.add(String.format("GW_BOOT_PID = [%s] \r\n", pid)); - try (FileOutputStream outputStream = new FileOutputStream(pidFile)) { - for (String bootInfo : bootInfos) { - outputStream.write(bootInfo.getBytes(StandardCharsets.UTF_8)); - } - outputStream.flush(); - } - } } diff --git a/deploy/deploy-gateway/src/main/resources/scripts/shutdown.sh b/deploy/deploy-gateway/src/main/resources/scripts/shutdown.sh index 0491e963..068c5ed0 100644 --- a/deploy/deploy-gateway/src/main/resources/scripts/shutdown.sh +++ b/deploy/deploy-gateway/src/main/resources/scripts/shutdown.sh @@ -1,32 +1,65 @@ #!/bin/bash -#启动Home路径 -BOOT_HOME=$(cd `dirname $0`;cd ../; pwd) - -#进程启动后PID.log所在路径 -PID_LOG=$BOOT_HOME/bin/PID.log - -#从启动文件中读取PID -if [ -f "$PID_LOG" ]; then - # File exist - echo "Read PID From File:[$PID_LOG] ..." - PID_LINE=`sed -n '$p' $PID_LOG` - echo "Last Gateway Boot Info = $PID_LINE ..." - if [[ $PID_LINE == *GW_BOOT_PID* ]]; then - LOG_PID=$(echo $PID_LINE | cut -d "=" -f 2 | cut -d "[" -f 2 | cut -d "]" -f 1) - echo "Last Gateway Boot PID = $LOG_PID ..." - PID=`ps -ef | grep deploy-gateway- | grep $LOG_PID | grep -v grep | awk '{print $2}'` +#定义程序启动的Jar包前缀 +APP_JAR_PREFIX=deploy-gateway- + +#获取当前的根目录 +APP_HOME=$(cd `dirname $0`;cd ../; pwd) + +#System路径 +APP_LIB_PATH=$APP_HOME/lib + +#获取Peer节点的启动Jar包 +APP_JAR=$(ls $APP_LIB_PATH | grep $APP_JAR_PREFIX) + +#APP_JAR的具体路径 +APP_JAR_PATH=$APP_LIB_PATH/$APP_JAR + +################################### +#(函数)判断程序是否已启动 +# +#说明: +#使用awk,分割出pid ($1部分),及Java程序名称($2部分) +################################### +#初始化psid变量(全局) +psid=0 + +checkpid() { + psid=`ps -ef | grep $APP_JAR_PATH | grep -v grep | awk '{print $2}'` +} + +################################### +#(函数)停止程序 +# +#说明: +#1. 首先调用checkpid函数,刷新$psid全局变量 +#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行 +#3. 使用kill -9 pid命令进行强制杀死进程 +#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $? +#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed] +#注意:echo -n 表示打印字符后,不换行 +#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值 +################################### +stop() { + checkpid + + if [[ $psid -ne 0 ]]; then + echo "Stopping Gateway ......(pid=$psid) " + JAVA_CMD="kill -9 $psid" + sleep 1 + $JAVA_CMD + if [[ $? -eq 0 ]]; then + echo "[OK]" + else + echo "[Failed]" fi -#启动文件不存在则直接通过PS进行过滤 -else - PID=`ps -ef | grep $BOOT_HOME/lib/deploy-gateway- | grep -v grep | awk '{print $2}'` -fi - -#通过Kill命令将进程杀死 -if [ -z "$PID" ]; then - echo "Unable to find gateway PID. stop aborted." -else - echo "Start to kill PID = $PID ..." - kill -9 $PID - echo "Gateway has been stopped ..." -fi \ No newline at end of file + else + echo "================================" + echo "WARN: Gateway is not running" + echo "================================" + fi +} + + +#真正停止的处理流程 +stop \ No newline at end of file diff --git a/deploy/deploy-gateway/src/main/resources/scripts/startup.sh b/deploy/deploy-gateway/src/main/resources/scripts/startup.sh index 01c86077..76189f54 100644 --- a/deploy/deploy-gateway/src/main/resources/scripts/startup.sh +++ b/deploy/deploy-gateway/src/main/resources/scripts/startup.sh @@ -1,19 +1,103 @@ #!/bin/bash -HOME=$(cd `dirname $0`;cd ../; pwd) -GATEWAY=$(ls $HOME/lib | grep deploy-gateway-) -PROC_INFO=$HOME/lib/$GATEWAY" -c "$HOME/config/gateway.conf -#echo $PROC_INFO -#get PID -PID=`ps -ef | grep "$PROC_INFO" | grep -v grep | awk '{print $2}'` -#echo $PID -if [[ ! -z $PID ]] -then - echo "process already exists,please check... If necessary, you should kill the process first." - exit +#设置Java命令 +JAVA_BIN=java + +#定义程序启动的Jar包前缀 +APP_JAR_PREFIX=deploy-gateway- + +#检查Java环境变量 +if [ ! -n "$JAVA_HOME" ]; then + echo "UnFound environment variable[JAVA_HOME], will use command[java]..." +else + JAVA_BIN=$JAVA_HOME/bin/java fi -if [ ! -n "$GATEWAY" ]; then - echo "GateWay Is Null !!!" + +#获取当前的根目录 +APP_HOME=$(cd `dirname $0`;cd ../; pwd) + +#Lib目录 +APP_LIB_PATH=$APP_HOME/lib + +#节点输出日志路径 +LOG_OUT=$APP_HOME/bin/gw.out + +#获取Peer节点的启动Jar包 +APP_JAR=$(ls $APP_LIB_PATH | grep $APP_JAR_PREFIX) + +#Config配置路径 +CONFIG_PATH=$APP_HOME/config + +#gateway.conf完整路径 +GATEWAY_CONFIG=$CONFIG_PATH/gateway.conf + +#定义程序启动的参数 +JAVA_OPTS="-jar -server -Xms1024m -Xmx1024m" + +#APP具体相关命令 +APP_CMD=$APP_LIB_PATH/$APP_JAR" -c "$GATEWAY_CONFIG + +#APP_JAR的具体路径 +APP_JAR_PATH=$APP_LIB_PATH/$APP_JAR + +#JAVA_CMD具体命令 +JAVA_CMD="$JAVA_BIN $JAVA_OPTS $APP_CMD" + +################################### +#(函数)判断程序是否已启动 +# +#说明: +#使用awk,分割出pid ($1部分),及Java程序名称($2部分) +################################### +#初始化psid变量(全局) +psid=0 + +checkpid() { + javaps=`ps -ef | grep $APP_JAR_PATH | grep -v grep | awk '{print $2}'` + + if [[ -n "$javaps" ]]; then + psid=$javaps + else + psid=0 + fi +} + +################################### +#(函数)打印系统环境参数 +################################### +info() { + echo "System Information:" + echo "****************************" + echo `uname -a` + echo + echo `$JAVA_BIN -version` + echo + echo "APP_HOME=$APP_HOME" + echo "APP_JAR=$APP_JAR" + echo "CONFIG_PATH=$CONFIG_PATH" + echo "APP_JAR_PATH=$APP_JAR_PATH" + echo + echo "JAVA_CMD=$JAVA_CMD" + echo "****************************" +} + +#真正启动的处理流程 +checkpid + +if [[ $psid -ne 0 ]]; then + echo "================================" + echo "warn: Gateway already started! (pid=$psid)" + echo "================================" else - nohup java -jar -server -Djdchain.log=$HOME $PROC_INFO $* >$HOME/bin/gw.out 2>&1 & + echo "Starting Gateway ......" + nohup $JAVA_BIN $JAVA_OPTS $APP_CMD $* >$LOG_OUT 2>&1 & + JAVA_CMD="$JAVA_BIN $JAVA_OPTS $APP_CMD $*" + sleep 1 + checkpid + if [[ $psid -ne 0 ]]; then + echo "(pid=$psid) [OK]" + info + else + echo "[Failed]" + fi fi \ No newline at end of file diff --git a/deploy/deploy-peer/src/main/java/com/jd/blockchain/boot/peer/PeerBooter.java b/deploy/deploy-peer/src/main/java/com/jd/blockchain/boot/peer/PeerBooter.java index d465a4ba..df9196e5 100644 --- a/deploy/deploy-peer/src/main/java/com/jd/blockchain/boot/peer/PeerBooter.java +++ b/deploy/deploy-peer/src/main/java/com/jd/blockchain/boot/peer/PeerBooter.java @@ -33,12 +33,8 @@ public class PeerBooter { public static void main(String[] args) { try { - HomeContext homeContext = HomeBooter.createHomeContext(args); - startPeer(homeContext); - - writePID(homeContext.getHomeDir()); } catch (Exception e) { System.err.println("Error!!! --[" + e.getClass().getName() + "] " + e.getMessage()); } @@ -56,24 +52,4 @@ public class PeerBooter { SYSTEM_MAIN_CLASS, home.getSystemClassLoader(), home.getStartingArgs() }; modularFactoryMethod.invoke(null, systemStartingArgs); } - - private static final void writePID(String homeDir) throws IOException { - String pidFilePath = homeDir + File.separator + "bin" + File.separator + "PID.log"; - File pidFile = new File(pidFilePath); - if (!pidFile.exists()) { - pidFile.createNewFile(); - } - String name = ManagementFactory.getRuntimeMXBean().getName(); - String pid = name.split("@")[0]; - List bootInfos = new ArrayList<>(); - bootInfos.add("JDChain peer node starts to boot ......\r\n"); - bootInfos.add(String.format("PEER_BOOT_TIME = [%s] \r\n", new Date().toString())); - bootInfos.add(String.format("PEER_BOOT_PID = [%s] \r\n", pid)); - try (FileOutputStream outputStream = new FileOutputStream(pidFile)) { - for (String bootInfo : bootInfos) { - outputStream.write(bootInfo.getBytes(StandardCharsets.UTF_8)); - } - outputStream.flush(); - } - } } diff --git a/deploy/deploy-peer/src/main/resources/scripts/peer-shutdown.sh b/deploy/deploy-peer/src/main/resources/scripts/peer-shutdown.sh index 4df77fb5..cd4c21dc 100644 --- a/deploy/deploy-peer/src/main/resources/scripts/peer-shutdown.sh +++ b/deploy/deploy-peer/src/main/resources/scripts/peer-shutdown.sh @@ -1,32 +1,65 @@ #!/bin/bash -#启动Home路径 -BOOT_HOME=$(cd `dirname $0`;cd ../; pwd) - -#进程启动后PID.log所在路径 -PID_LOG=$BOOT_HOME/bin/PID.log - -#从启动文件中读取PID -if [ -f "$PID_LOG" ]; then - # File exist - echo "Read PID From File:[$PID_LOG] ..." - PID_LINE=`sed -n '$p' $PID_LOG` - echo "Last Peer Boot Info = $PID_LINE ..." - if [[ $PID_LINE == *PEER_BOOT_PID* ]]; then - LOG_PID=$(echo $PID_LINE | cut -d "=" -f 2 | cut -d "[" -f 2 | cut -d "]" -f 1) - echo "Last Peer Boot PID = $LOG_PID ..." - PID=`ps -ef | grep deploy-peer- | grep $LOG_PID | grep -v grep | awk '{print $2}'` +#定义程序启动的Jar包前缀 +APP_JAR_PREFIX=deploy-peer- + +#获取当前的根目录 +APP_HOME=$(cd `dirname $0`;cd ../; pwd) + +#System路径 +APP_SYSTEM_PATH=$APP_HOME/system + +#获取Peer节点的启动Jar包 +APP_JAR=$(ls $APP_SYSTEM_PATH | grep $APP_JAR_PREFIX) + +#APP_JAR的具体路径 +APP_JAR_PATH=$APP_SYSTEM_PATH/$APP_JAR + +################################### +#(函数)判断程序是否已启动 +# +#说明: +#使用awk,分割出pid ($1部分),及Java程序名称($2部分) +################################### +#初始化psid变量(全局) +psid=0 + +checkpid() { + psid=`ps -ef | grep $APP_JAR_PATH | grep -v grep | awk '{print $2}'` +} + +################################### +#(函数)停止程序 +# +#说明: +#1. 首先调用checkpid函数,刷新$psid全局变量 +#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行 +#3. 使用kill -9 pid命令进行强制杀死进程 +#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $? +#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed] +#注意:echo -n 表示打印字符后,不换行 +#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值 +################################### +stop() { + checkpid + + if [[ $psid -ne 0 ]]; then + echo "Stopping Peer ......(pid=$psid) " + JAVA_CMD="kill -9 $psid" + sleep 1 + $JAVA_CMD + if [[ $? -eq 0 ]]; then + echo "[OK]" + else + echo "[Failed]" fi -#启动文件不存在则直接通过PS进行过滤 -else - PID=`ps -ef | grep $BOOT_HOME/system/deploy-peer- | grep -v grep | awk '{print $2}'` -fi - -#通过Kill命令将进程杀死 -if [ -z "$PID" ]; then - echo "Unable to find peer PID. stop aborted." -else - echo "Start to kill PID = $PID ..." - kill -9 $PID - echo "Peer has been stopped ..." -fi \ No newline at end of file + else + echo "================================" + echo "WARN: Peer is not running" + echo "================================" + fi +} + + +#真正停止的处理流程 +stop \ No newline at end of file diff --git a/deploy/deploy-peer/src/main/resources/scripts/peer-startup.sh b/deploy/deploy-peer/src/main/resources/scripts/peer-startup.sh index 3367c3fc..19dfa675 100644 --- a/deploy/deploy-peer/src/main/resources/scripts/peer-startup.sh +++ b/deploy/deploy-peer/src/main/resources/scripts/peer-startup.sh @@ -1,19 +1,107 @@ #!/bin/bash -HOME=$(cd `dirname $0`;cd ../; pwd) -PEER=$(ls $HOME/system | grep deploy-peer-) -PROC_INFO=$HOME/system/$PEER" -home="$HOME" -c "$HOME/config/ledger-binding.conf" -p 7080" -#echo $PROC_INFO -#get PID -PID=`ps -ef | grep "$PROC_INFO" | grep -v grep | awk '{print $2}'` -#echo $PID -if [[ ! -z $PID ]] -then - echo "process already exists,please check... If necessary, you should kill the process first." - exit +#设置Java命令 +JAVA_BIN=java + +#定义程序启动的Jar包前缀 +APP_JAR_PREFIX=deploy-peer- + +#Peer节点Web端口 +#请运维根据实际环境进行调整 +WEB_PORT=7080 + +#检查Java环境变量 +if [ ! -n "$JAVA_HOME" ]; then + echo "UnFound environment variable[JAVA_HOME], will use command[java]..." +else + JAVA_BIN=$JAVA_HOME/bin/java fi -if [ ! -n "$PEER" ]; then - echo "Peer Is Null !!!" + +#获取当前的根目录 +APP_HOME=$(cd `dirname $0`;cd ../; pwd) + +#System目录 +APP_SYSTEM_PATH=$APP_HOME/system + +#节点输出日志路径 +LOG_OUT=$APP_HOME/bin/peer.out + +#获取Peer节点的启动Jar包 +APP_JAR=$(ls $APP_SYSTEM_PATH | grep $APP_JAR_PREFIX) + +#Config配置路径 +CONFIG_PATH=$APP_HOME/config + +#ledger-binding.conf完整路径 +LEDGER_BINDING_CONFIG=$CONFIG_PATH/ledger-binding.conf + +#定义程序启动的参数 +JAVA_OPTS="-jar -server -Xms2048m -Xmx2048m" + +#APP具体相关命令 +APP_CMD=$APP_SYSTEM_PATH/$APP_JAR" -home="$APP_HOME" -c "$LEDGER_BINDING_CONFIG" -p "$WEB_PORT + +#APP_JAR的具体路径 +APP_JAR_PATH=$APP_SYSTEM_PATH/$APP_JAR + +#JAVA_CMD具体命令 +JAVA_CMD="$JAVA_BIN $JAVA_OPTS $APP_CMD" + +################################### +#(函数)判断程序是否已启动 +# +#说明: +#使用awk,分割出pid ($1部分),及Java程序名称($2部分) +################################### +#初始化psid变量(全局) +psid=0 + +checkpid() { + javaps=`ps -ef | grep $APP_JAR_PATH | grep -v grep | awk '{print $2}'` + + if [[ -n "$javaps" ]]; then + psid=$javaps + else + psid=0 + fi +} + +################################### +#(函数)打印系统环境参数 +################################### +info() { + echo "System Information:" + echo "****************************" + echo `uname -a` + echo + echo `$JAVA_BIN -version` + echo + echo "APP_HOME=$APP_HOME" + echo "APP_JAR=$APP_JAR" + echo "CONFIG_PATH=$CONFIG_PATH" + echo "APP_JAR_PATH=$APP_JAR_PATH" + echo + echo "JAVA_CMD=$JAVA_CMD" + echo "****************************" +} + +#真正启动的处理流程 +checkpid + +if [[ $psid -ne 0 ]]; then + echo "================================" + echo "warn: Peer already started! (pid=$psid)" + echo "================================" else - nohup java -jar -server -Xmx1g -Xms1g -Djdchain.log=$HOME $PROC_INFO $* >$HOME/bin/peer.out 2>&1 & + echo "Starting Peer ......" + nohup $JAVA_BIN $JAVA_OPTS $APP_CMD $* >$LOG_OUT 2>&1 & + JAVA_CMD="$JAVA_BIN $JAVA_OPTS $APP_CMD $*" + sleep 1 + checkpid + if [[ $psid -ne 0 ]]; then + echo "(pid=$psid) [OK]" + info + else + echo "[Failed]" + fi fi \ No newline at end of file diff --git a/explorer b/explorer index 2f8f4843..3ffc3324 160000 --- a/explorer +++ b/explorer @@ -1 +1 @@ -Subproject commit 2f8f48435e65d4f6598b1ede9c6a7021b10d2a53 +Subproject commit 3ffc3324c9fe20307cc36c07c361daa1f5d3f11e diff --git a/libs/bft-smart b/libs/bft-smart index f2660860..722663f9 160000 --- a/libs/bft-smart +++ b/libs/bft-smart @@ -1 +1 @@ -Subproject commit f2660860f71850b4e70ae529fbdb8320623bcaff +Subproject commit 722663f988affc77cc5aec502da455afb3f7eec5