Browse Source

modify shell of startup and shutdown

tags/1.4.0^2
shaozhuguang 3 years ago
parent
commit
8b9320d9db
9 changed files with 327 additions and 149 deletions
  1. +1
    -1
      core
  2. +0
    -36
      deploy/deploy-gateway/src/main/java/com/jd/blockchain/gateway/boot/GatewayBooter.java
  3. +62
    -29
      deploy/deploy-gateway/src/main/resources/scripts/shutdown.sh
  4. +98
    -14
      deploy/deploy-gateway/src/main/resources/scripts/startup.sh
  5. +0
    -24
      deploy/deploy-peer/src/main/java/com/jd/blockchain/boot/peer/PeerBooter.java
  6. +62
    -29
      deploy/deploy-peer/src/main/resources/scripts/peer-shutdown.sh
  7. +102
    -14
      deploy/deploy-peer/src/main/resources/scripts/peer-startup.sh
  8. +1
    -1
      explorer
  9. +1
    -1
      libs/bft-smart

+ 1
- 1
core

@@ -1 +1 @@
Subproject commit c770f544e9892b4cc2e937a336abf59a40fc198a
Subproject commit d55343ab297329f9476d7fa1494ebb4c9c5fd878

+ 0
- 36
deploy/deploy-gateway/src/main/java/com/jd/blockchain/gateway/boot/GatewayBooter.java View File

@@ -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<String> 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();
}
}
}

+ 62
- 29
deploy/deploy-gateway/src/main/resources/scripts/shutdown.sh View File

@@ -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
else
echo "================================"
echo "WARN: Gateway is not running"
echo "================================"
fi
}


#真正停止的处理流程
stop

+ 98
- 14
deploy/deploy-gateway/src/main/resources/scripts/startup.sh View File

@@ -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

+ 0
- 24
deploy/deploy-peer/src/main/java/com/jd/blockchain/boot/peer/PeerBooter.java View File

@@ -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<String> 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();
}
}
}

+ 62
- 29
deploy/deploy-peer/src/main/resources/scripts/peer-shutdown.sh View File

@@ -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
else
echo "================================"
echo "WARN: Peer is not running"
echo "================================"
fi
}


#真正停止的处理流程
stop

+ 102
- 14
deploy/deploy-peer/src/main/resources/scripts/peer-startup.sh View File

@@ -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

+ 1
- 1
explorer

@@ -1 +1 @@
Subproject commit 2f8f48435e65d4f6598b1ede9c6a7021b10d2a53
Subproject commit 3ffc3324c9fe20307cc36c07c361daa1f5d3f11e

+ 1
- 1
libs/bft-smart

@@ -1 +1 @@
Subproject commit f2660860f71850b4e70ae529fbdb8320623bcaff
Subproject commit 722663f988affc77cc5aec502da455afb3f7eec5

Loading…
Cancel
Save