-
首先先讲一下java调用shell脚本的代码,通过exec去调用,可将控制台打印的文件返回
/**
* 使用 exec 调用shell脚本
* @param shellString
*/
public static List callShellByExec(String shellString) throws IOException {
BufferedReader reader = null;
List<String> list=new ArrayList<>();
try {
Process process = Runtime.getRuntime().exec(shellString);
int exitValue = process.waitFor();
if (0 != exitValue) {
log.error("call shell failed. error code is :" + exitValue);
}
// 返回值
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
list.add(line);
System.out.println("mac@wxw % " + line);
}
} catch (Throwable e) {
log.error("call shell failed. " + e);
}finally {
reader.close();
}
return list;
}
-
shell脚本介绍,最上边的是每个服务的jar包存放地址,然后中间的是,每个服务的lib依赖文件地址(因为这里使用了springboot瘦身打包方式,所以依赖和jar包是分开的),再下边是每个服务的端口
#!/bin/sh
export SYSTEM=/usr/local/scapro/app/prod/jar/sca-system-1.0.1.jar
export GATEWAY=/usr/local/scapro/app/prod/jar/sca-gateway-1.0.1.jar
export JWT=/usr/local/scapro/app/prod/jar/sca-jwt-1.0.1.jar
export BUSINESS=/usr/local/scapro/app/prod/jar/sca-cms-business-1.0.1.jar
export GATHER=/usr/local/scapro/app/prod/jar/sca-cms-gather-1.0.1.jar
export SOCKET=/usr/local/scapro/app/prod/jar/sca-cms-socket-1.0.1.jar
export CONSUMER=/usr/local/scapro/app/prod/jar/sca-cms-consumer-1.0.1.jar
export EQP=/usr/local/scapro/app/prod/jar/sca-eqp-1.0.1.jar
export UPGRADE=/usr/local/scapro/app/prod/sca-upgrade-1.0.1.jar
export SYSTEM_LIB=/usr/local/scapro/app/prod/servicelib/system/lib
export GATEWAY_LIB=/usr/local/scapro/app/prod/servicelib/gateway/lib
export JWT_LIB=/usr/local/scapro/app/prod/servicelib/jwt/lib
export BUSINESS_LIB=/usr/local/scapro/app/prod/servicelib/business/lib
export GATHER_LIB=/usr/local/scapro/app/prod/servicelib/gather/lib
export SOCKET_LIB=/usr/local/scapro/app/prod/servicelib/socket/lib
export CONSUMER_LIB=/usr/local/scapro/app/prod/servicelib/consumer/lib
export EQP_LIB=/usr/local/scapro/app/prod/servicelib/eqp/lib
export UPGRADE_LIB=/usr/local/scapro/app/prod/servicelib/upgrade/lib
export SYSTEM_port=8007
export GATEWAY_port=7003
export JWT_port=8006
export BUSINESS_port=8009
export GATHER_port=8011
export SOCKET_port=8010
export CONSUMER_port=8012
export EQP_port=8008
export UPGRADE_port=8057
export JAVA_OPTS="-Xms512M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=256M"
case "$1" in
start)
case "$2" in
system|SYSTEM)
## 启动SYSTEM
echo "--------SYSTEM 开始启动--------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$SYSTEM_LIB $SYSTEM >/usr/local/scapro/app/prod/logs/sca-system/system.log 2>&1 &
EUREKA_pid=`ps -ef|grep $SYSTEM|grep -v grep|awk '{print $2}'`
until [ -n "$EUREKA_pid" ]
do
EUREKA_pid=`ps -ef|grep $SYSTEM|grep -v grep|awk '{print $2}'`
done
echo "SYSTEM pid is $EUREKA_pid"
echo "--------SYSTEM 启动成功--------------"
;;
gateway|GATEWAY)
## 启动GZGL
echo "--------开始启动GATEWAY---------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$GATEWAY_LIB $GATEWAY >/usr/local/scapro/app/prod/logs/sca-gateway/gateway.log 2>&1 &
GZGL_pid=`ps -ef|grep $GATEWAY|grep -v grep|awk '{print $2}'`
until [ -n "$GZGL_pid" ]
do
GZGL_pid=`ps -ef|grep $GATEWAY|grep -v grep|awk '{print $2}'`
done
echo "GATEWAY pid is $GZGL_pid"
echo "---------GATEWAY 启动成功-----------"
;;
jwt|JWT)
## 启动COLLECTER
echo "--------开始启动JWT---------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$JWT_LIB $JWT >/usr/local/scapro/app/prod/logs/sca-jwt/jwt.log 2>&1 &
COLLECTER_pid=`ps -ef|grep $JWT|grep -v grep|awk '{print $2}'`
until [ -n "$COLLECTER_pid" ]
do
COLLECTER_pid=`ps -ef|grep $JWT|grep -v grep|awk '{print $2}'`
done
echo "JWT pid is $COLLECTER_pid"
echo "---------JWT 启动成功-----------"
;;
business|BUSINESS)
## 启动ZDMB
echo "--------开始启动BUSINESS---------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$BUSINESS_LIB $BUSINESS >/usr/local/scapro/app/prod/logs/sca-cms-business/business.log 2>&1 &
ZDMB_pid=`ps -ef|grep $BUSINESS|grep -v grep|awk '{print $2}'`
until [ -n "$ZDMB_pid" ]
do
ZDMB_pid=`ps -ef|grep $BUSINESS|grep -v grep|awk '{print $2}'`
done
echo "BUSINESS pid is $ZDMB_pid"
echo "---------BUSINESS 启动成功-----------"
;;
gather|GATHER)
## 启动XTSZ
echo "--------开始启动GATHER---------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$GATHER_LIB $GATHER >/usr/local/scapro/app/prod/logs/sca-cms-gather/gather.log 2>&1 &
XTSZ_pid=`ps -ef|grep $GATHER|grep -v grep|awk '{print $2}'`
until [ -n "$XTSZ_pid" ]
do
XTSZ_pid=`ps -ef|grep $GATHER|grep -v grep|awk '{print $2}'`
done
echo "GATHER pid is $XTSZ_pid"
echo "---------GATHER 启动成功-----------"
;;
socket|SOCKET)
## 启动QBSJ
echo "--------开始启动SOCKET---------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$SOCKET_LIB $SOCKET >/usr/local/scapro/app/prod/logs/sca-cms-socket/socket.log 2>&1 &
QBSJ_pid=`ps -ef|grep $SOCKET|grep -v grep|awk '{print $2}'`
until [ -n "$QBSJ_pid" ]
do
QBSJ_pid=`ps -ef|grep $SOCKET|grep -v grep|awk '{print $2}'`
done
echo "SOCKET pid is $QBSJ_pid"
echo "---------SOCKET 启动成功-----------"
;;
consumer|CONSUMER)
## 启动FILE
echo "--------开始启动CONSUMER---------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$CONSUMER_LIB $CONSUMER >/usr/local/scapro/app/prod/logs/sca-cms-consumer/consumer.log 2>&1 &
FILE_pid=`ps -ef|grep $CONSUMER|grep -v grep|awk '{print $2}'`
until [ -n "$FILE_pid" ]
do
FILE_pid=`ps -ef|grep $CONSUMER|grep -v grep|awk '{print $2}'`
done
echo "CONSUMER pid is $FILE_pid"
echo "---------CONSUMER 启动成功-----------"
;;
eqp|EQP)
## 启动PTAQ
echo "--------开始启动EQP---------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$EQP_LIB $EQP >/usr/local/scapro/app/prod/logs/sca-eqp/eqp.log 2>&1 &
PTAQ_pid=`ps -ef|grep $EQP|grep -v grep|awk '{print $2}'`
until [ -n "$PTAQ_pid" ]
do
PTAQ_pid=`ps -ef|grep $EQP|grep -v grep|awk '{print $2}'`
done
echo "EQP pid is $PTAQ_pid"
echo "---------EQP 启动成功-----------"
;;
upgrade|UPGRADE)
## 启动PTAQ
echo "--------开始启动UPGRADE---------------"
nohup java -jar $JAVA_OPTS -Dloader.path=$UPGRADE_LIB $UPGRADE >/usr/local/scapro/app/prod/logs/sca-upgrade/upgrade.log 2>&1 &
PTAQ_pid=`ps -ef|grep $UPGRADE|grep -v grep|awk '{print $2}'`
until [ -n "$PTAQ_pid" ]
do
PTAQ_pid=`ps -ef|grep $UPGRADE|grep -v grep|awk '{print $2}'`
done
echo "UPGRADE pid is $PTAQ_pid"
echo "---------UPGRADE启动成功-----------"
;;
esac
;;
stop)
case "$2" in
system|SYSTEM)
P_ID=`ps -ef | grep -w $SYSTEM | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===SYSTEM process not exists or stop success"
else
kill -9 $P_ID
echo "SYSTEM killed success"
fi
;;
gateway|GATEWAY)
P_ID=`ps -ef | grep -w $GATEWAY | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===GATEWAY process not exists or stop success"
else
kill -9 $P_ID
echo "GATEWAY killed success"
fi
;;
jwt|JWT)
P_ID=`ps -ef | grep -w $JWT | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===JWT process not exists or stop success"
else
kill -9 $P_ID
echo "JWT killed success"
fi
;;
business|BUSINESS)
P_ID=`ps -ef | grep -w $BUSINESS | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===BUSINESS process not exists or stop success"
else
kill -9 $P_ID
echo "BUSINESS killed success"
fi
;;
gather|GATHER)
P_ID=`ps -ef | grep -w $GATHER | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===GATHER process not exists or stop success"
else
kill -9 $P_ID
echo "GATHER killed success"
fi
;;
socket|SOCKET)
P_ID=`ps -ef | grep -w $SOCKET | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===SOCKET process not exists or stop success"
else
kill -9 $P_ID
echo "SOCKET killed success"
fi
;;
consumer|CONSUMER)
P_ID=`ps -ef | grep -w $CONSUMER | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===CONSUMER process not exists or stop success"
else
kill -9 $P_ID
echo "CONSUMER killed success"
fi
;;
eqp|EQP)
P_ID=`ps -ef | grep -w $EQP | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===EQP process not exists or stop success"
else
kill -9 $P_ID
echo "EQP killed success"
fi
;;
upgrade|UPGRADE)
P_ID=`ps -ef | grep -w $UPGRADE | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===UPGRADE process not exists or stop success"
else
kill -9 $P_ID
echo "UPGRADE killed success"
fi
;;
esac
;;
restart)
$0 stop $2
sleep 2
$0 start $2
echo "===restart $2 success==="
;;
esac
exit 0
-
shell脚本的使用方式
启动
./shell.sh start 服务名
停止
./shell.sh stop 服务名
重启
./shell.sh restart 服务名
-
存在的问题,可能在调用shell脚本时会出现权限不足的问题,这个时候使用命令给个权限就好了
chmod 777 shell脚本的完成绝对路径