背景
公司项目是spring cloud eureka微服务系列的架构,在内网环境linux上需要一键启动/停止多个jar包。考虑到.sh文件的执行,仅供参考,有其他方案的同学请留言告知,在此先感谢了!
代码
1.一键启动/停止多个jar
启动:./java.sh start
停止:./java.sh stop
重启:./java.sh restart
java.sh代码:
#!/bin/sh
export EUREKA=eureka-0.0.1-SNAPSHOT.jar
export GZGL=gzgl-server-0.0.1-SNAPSHOT.jar
export COLLECTER=ww-collecter-1.0.0-SNAPSHOT.jar
export WWZS=ROOT.war
export ZDMB=zdmb-server-0.0.1-SNAPSHOT.jar
export XTSZ=xtsz-server-0.0.1-SNAPSHOT.jar
export QBSJ=qbsj-server-0.0.1-SNAPSHOT.jar
export FILE=file-server-0.0.1-SNAPSHOT.jar
export PTAQ=ptaq-server-0.0.1-SNAPSHOT.jar
export QYXZ=qyxz-server-0.0.1-SNAPSHOT.jar
export FXPG=fxpg-server-0.0.1-SNAPSHOT.jar
export OPEN=open-server-0.0.1-SNAPSHOT.jar
export EUREKA_port=8081
export GZGL_port=8082
export COLLECTER_port=8083
export WWZS_port=8084
export ZDMB_port=8085
export XTSZ_port=8086
export QBSJ_port=8087
export FILE_port=8088
export PTAQ_port=8089
export QYXZ_port=8090
export FXPG_port=8091
export OPEN_port=8092
case "$1" in
start)
## 启动eureka
echo "--------eureka 开始启动--------------"
nohup java -jar $EUREKA >/dev/null 2>&1 &
EUREKA_pid=`lsof -i:$EUREKA_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$EUREKA_pid" ]
do
EUREKA_pid=`lsof -i:$EUREKA_port|grep "LISTEN"|awk '{print $2}'`
done
echo "EUREKA pid is $EUREKA_pid"
echo "--------eureka 启动成功--------------"
## 启动GZGL
echo "--------开始启动GZGL---------------"
nohup java -jar $GZGL >/dev/null 2>&1 &
GZGL_pid=`lsof -i:$GZGL_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$GZGL_pid" ]
do
GZGL_pid=`lsof -i:$GZGL_port|grep "LISTEN"|awk '{print $2}'`
done
echo "GZGL pid is $GZGL_pid"
echo "---------GZGL 启动成功-----------"
## 启动COLLECTER
echo "--------开始启动COLLECTER---------------"
nohup java -jar $COLLECTER >/dev/null 2>&1 &
COLLECTER_pid=`lsof -i:$COLLECTER_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$COLLECTER_pid" ]
do
COLLECTER_pid=`lsof -i:$COLLECTER_port|grep "LISTEN"|awk '{print $2}'`
done
echo "COLLECTER pid is $COLLECTER_pid"
echo "---------COLLECTER 启动成功-----------"
## 启动ZDMB
echo "--------开始启动ZDMB---------------"
nohup java -jar $ZDMB >/dev/null 2>&1 &
ZDMB_pid=`lsof -i:$ZDMB_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$ZDMB_pid" ]
do
ZDMB_pid=`lsof -i:$ZDMB_port|grep "LISTEN"|awk '{print $2}'`
done
echo "ZDMB pid is $ZDMB_pid"
echo "---------ZDMB 启动成功-----------"
## 启动XTSZ
echo "--------开始启动XTSZ---------------"
nohup java -jar $XTSZ >/dev/null 2>&1 &
XTSZ_pid=`lsof -i:$XTSZ_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$XTSZ_pid" ]
do
XTSZ_pid=`lsof -i:$XTSZ_port|grep "LISTEN"|awk '{print $2}'`
done
echo "XTSZ pid is $XTSZ_pid"
echo "---------XTSZ 启动成功-----------"
## 启动QBSJ
echo "--------开始启动QBSJ---------------"
nohup java -jar $QBSJ >/dev/null 2>&1 &
QBSJ_pid=`lsof -i:$QBSJ_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$QBSJ_pid" ]
do
QBSJ_pid=`lsof -i:$QBSJ_port|grep "LISTEN"|awk '{print $2}'`
done
echo "QBSJ pid is $QBSJ_pid"
echo "---------QBSJ 启动成功-----------"
## 启动FILE
echo "--------开始启动FILE---------------"
nohup java -jar $FILE >/dev/null 2>&1 &
FILE_pid=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$FILE_pid" ]
do
FILE_pid=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'`
done
echo "FILE pid is $FILE_pid"
echo "---------FILE 启动成功-----------"
## 启动PTAQ
echo "--------开始启动PTAQ---------------"
nohup java -jar $PTAQ >/dev/null 2>&1 &
PTAQ_pid=`lsof -i:$PTAQ_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$PTAQ_pid" ]
do
PTAQ_pid=`lsof -i:$PTAQ_port|grep "LISTEN"|awk '{print $2}'`
done
echo "PTAQ pid is $PTAQ_pid"
echo "---------PTAQ 启动成功-----------"
## 启动QYXZ
echo "--------开始启动QYXZ---------------"
nohup java -jar $QYXZ >/dev/null 2>&1 &
QYXZ_pid=`lsof -i:$QYXZ_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$QYXZ_pid" ]
do
QYXZ_pid=`lsof -i:$QYXZ_port|grep "LISTEN"|awk '{print $2}'`
done
echo "QYXZ pid is $QYXZ_pid"
echo "---------QYXZ 启动成功-----------"
## 启动FXPG
echo "--------开始启动FXPG---------------"
nohup java -jar $FXPG >/dev/null 2>&1 &
FXPG_pid=`lsof -i:$FXPG_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$FXPG_pid" ]
do
FXPG_pid=`lsof -i:$FXPG_port|grep "LISTEN"|awk '{print $2}'`
done
echo "FXPG pid is $FXPG_pid"
echo "---------FXPG 启动成功-----------"
## 启动OPEN
echo "--------开始启动OPEN---------------"
nohup java -jar $OPEN >/dev/null 2>&1 &
OPEN_pid=`lsof -i:$OPEN_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$OPEN_pid" ]
do
OPEN_pid=`lsof -i:$OPEN_port|grep "LISTEN"|awk '{print $2}'`
done
echo "OPEN pid is $OPEN_pid"
echo "---------OPEN 启动成功-----------"
echo "===startAll success==="
;;
stop)
P_ID=`ps -ef | grep -w $EUREKA | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===EUREKA process not exists or stop success"
else
kill -9 $P_ID
echo "EUREKA killed success"
fi
P_ID=`ps -ef | grep -w $GZGL | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===GZGL process not exists or stop success"
else
kill -9 $P_ID
echo "GZGL killed success"
fi
P_ID=`ps -ef | grep -w $COLLECTER | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===COLLECTER process not exists or stop success"
else
kill -9 $P_ID
echo "COLLECTER killed success"
fi
P_ID=`ps -ef | grep -w $WWZS | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===WWZS process not exists or stop success"
else
kill -9 $P_ID
echo "WWZS killed success"
fi
P_ID=`ps -ef | grep -w $ZDMB | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===ZDMB process not exists or stop success"
else
kill -9 $P_ID
echo "ZDMB killed success"
fi
P_ID=`ps -ef | grep -w $XTSZ | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===XTSZ process not exists or stop success"
else
kill -9 $P_ID
echo "XTSZ killed success"
fi
P_ID=`ps -ef | grep -w $QBSJ | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===QBSJ process not exists or stop success"
else
kill -9 $P_ID
echo "QBSJ killed success"
fi
P_ID=`ps -ef | grep -w $FILE | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===FILE process not exists or stop success"
else
kill -9 $P_ID
echo "FILE killed success"
fi
P_ID=`ps -ef | grep -w $PTAQ | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===PTAQ process not exists or stop success"
else
kill -9 $P_ID
echo "PTAQ killed success"
fi
P_ID=`ps -ef | grep -w $QYXZ | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===QYXZ process not exists or stop success"
else
kill -9 $P_ID
echo "QYXZ killed success"
fi
P_ID=`ps -ef | grep -w $FXPG | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===FXPG process not exists or stop success"
else
kill -9 $P_ID
echo "FXPG killed success"
fi
P_ID=`ps -ef | grep -w $OPEN | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===OPEN process not exists or stop success"
else
kill -9 $P_ID
echo "OPEN killed success"
fi
echo "===stopAll success==="
;;
restart)
$0 stop
sleep 2
$0 start
echo "===restartAll success==="
;;
esac
exit 0
2.启动/停止单个jar
启动:./java-one.sh start eureka 其他服务类似
停止:./java-one.sh stop eureka 其他服务类似
重启:./java-one.sh restart eureka
java-one.sh代码:
#!/bin/sh
export EUREKA=eureka-0.0.1-SNAPSHOT.jar
export GZGL=gzgl-server-0.0.1-SNAPSHOT.jar
export COLLECTER=ww-collecter-1.0.0-SNAPSHOT.jar
export WWZS=ROOT.war
export ZDMB=zdmb-server-0.0.1-SNAPSHOT.jar
export XTSZ=xtsz-server-0.0.1-SNAPSHOT.jar
export QBSJ=qbsj-server-0.0.1-SNAPSHOT.jar
export FILE=file-server-0.0.1-SNAPSHOT.jar
export PTAQ=ptaq-server-0.0.1-SNAPSHOT.jar
export QYXZ=qyxz-server-0.0.1-SNAPSHOT.jar
export FXPG=fxpg-server-0.0.1-SNAPSHOT.jar
export OPEN=open-server-0.0.1-SNAPSHOT.jar
export EUREKA_port=8081
export GZGL_port=8082
export COLLECTER_port=8083
export WWZS_port=8084
export ZDMB_port=8085
export XTSZ_port=8086
export QBSJ_port=8087
export FILE_port=8088
export PTAQ_port=8089
export QYXZ_port=8090
export FXPG_port=8091
export OPEN_port=8092
case "$1" in
start)
case "$2" in
eureka|EUREKA)
## 启动eureka
echo "--------eureka 开始启动--------------"
nohup java -jar $EUREKA >/dev/null 2>&1 &
EUREKA_pid=`lsof -i:$EUREKA_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$EUREKA_pid" ]
do
EUREKA_pid=`lsof -i:$EUREKA_port|grep "LISTEN"|awk '{print $2}'`
done
echo "EUREKA pid is $EUREKA_pid"
echo "--------eureka 启动成功--------------"
;;
gzgl|GZGL)
## 启动GZGL
echo "--------开始启动GZGL---------------"
nohup java -jar $GZGL >/dev/null 2>&1 &
GZGL_pid=`lsof -i:$GZGL_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$GZGL_pid" ]
do
GZGL_pid=`lsof -i:$GZGL_port|grep "LISTEN"|awk '{print $2}'`
done
echo "GZGL pid is $GZGL_pid"
echo "---------GZGL 启动成功-----------"
;;
collecter|COLLECTER)
## 启动COLLECTER
echo "--------开始启动COLLECTER---------------"
nohup java -jar $COLLECTER >/dev/null 2>&1 &
COLLECTER_pid=`lsof -i:$COLLECTER_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$COLLECTER_pid" ]
do
COLLECTER_pid=`lsof -i:$COLLECTER_port|grep "LISTEN"|awk '{print $2}'`
done
echo "COLLECTER pid is $COLLECTER_pid"
echo "---------COLLECTER 启动成功-----------"
;;
zdmb|ZDMB)
## 启动ZDMB
echo "--------开始启动ZDMB---------------"
nohup java -jar $ZDMB >/dev/null 2>&1 &
ZDMB_pid=`lsof -i:$ZDMB_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$ZDMB_pid" ]
do
ZDMB_pid=`lsof -i:$ZDMB_port|grep "LISTEN"|awk '{print $2}'`
done
echo "ZDMB pid is $ZDMB_pid"
echo "---------ZDMB 启动成功-----------"
;;
xtsz|XTSZ)
## 启动XTSZ
echo "--------开始启动XTSZ---------------"
nohup java -jar $XTSZ >/dev/null 2>&1 &
XTSZ_pid=`lsof -i:$XTSZ_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$XTSZ_pid" ]
do
XTSZ_pid=`lsof -i:$XTSZ_port|grep "LISTEN"|awk '{print $2}'`
done
echo "XTSZ pid is $XTSZ_pid"
echo "---------XTSZ 启动成功-----------"
;;
qbsj|QBSJ)
## 启动QBSJ
echo "--------开始启动QBSJ---------------"
nohup java -jar $QBSJ >/dev/null 2>&1 &
QBSJ_pid=`lsof -i:$QBSJ_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$QBSJ_pid" ]
do
QBSJ_pid=`lsof -i:$QBSJ_port|grep "LISTEN"|awk '{print $2}'`
done
echo "QBSJ pid is $QBSJ_pid"
echo "---------QBSJ 启动成功-----------"
;;
file|FILE)
## 启动FILE
echo "--------开始启动FILE---------------"
nohup java -jar $FILE >/dev/null 2>&1 &
FILE_pid=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$FILE_pid" ]
do
FILE_pid=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'`
done
echo "FILE pid is $FILE_pid"
echo "---------FILE 启动成功-----------"
;;
ptaq|PTAQ)
## 启动PTAQ
echo "--------开始启动PTAQ---------------"
nohup java -jar $PTAQ >/dev/null 2>&1 &
PTAQ_pid=`lsof -i:$PTAQ_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$PTAQ_pid" ]
do
PTAQ_pid=`lsof -i:$PTAQ_port|grep "LISTEN"|awk '{print $2}'`
done
echo "PTAQ pid is $PTAQ_pid"
echo "---------PTAQ 启动成功-----------"
;;
qyxz|QYXZ)
## 启动QYXZ
echo "--------开始启动QYXZ---------------"
nohup java -jar $QYXZ >/dev/null 2>&1 &
QYXZ_pid=`lsof -i:$QYXZ_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$QYXZ_pid" ]
do
QYXZ_pid=`lsof -i:$QYXZ_port|grep "LISTEN"|awk '{print $2}'`
done
echo "QYXZ pid is $QYXZ_pid"
echo "---------QYXZ 启动成功-----------"
;;
fxpg|FXPG)
## 启动FXPG
echo "--------开始启动FXPG---------------"
nohup java -jar $FXPG >/dev/null 2>&1 &
FXPG_pid=`lsof -i:$FXPG_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$FXPG_pid" ]
do
FXPG_pid=`lsof -i:$FXPG_port|grep "LISTEN"|awk '{print $2}'`
done
echo "FXPG pid is $FXPG_pid"
echo "---------FXPG 启动成功-----------"
;;
open|OPEN)
## 启动OPEN
echo "--------开始启动OPEN---------------"
nohup java -jar $OPEN >/dev/null 2>&1 &
OPEN_pid=`lsof -i:$OPEN_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$OPEN_pid" ]
do
OPEN_pid=`lsof -i:$OPEN_port|grep "LISTEN"|awk '{print $2}'`
done
echo "OPEN pid is $OPEN_pid"
echo "---------OPEN 启动成功-----------"
;;
esac
;;
stop)
case "$2" in
eureka|EUREKA)
P_ID=`ps -ef | grep -w $EUREKA | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===EUREKA process not exists or stop success"
else
kill -9 $P_ID
echo "EUREKA killed success"
fi
;;
gzgl|GZGL)
P_ID=`ps -ef | grep -w $GZGL | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===GZGL process not exists or stop success"
else
kill -9 $P_ID
echo "GZGL killed success"
fi
;;
collecter|COLLECTER)
P_ID=`ps -ef | grep -w $COLLECTER | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===COLLECTER process not exists or stop success"
else
kill -9 $P_ID
echo "COLLECTER killed success"
fi
;;
wwzs|WWZS)
P_ID=`ps -ef | grep -w $WWZS | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===WWZS process not exists or stop success"
else
kill -9 $P_ID
echo "WWZS killed success"
fi
;;
zdmb|ZDMB)
P_ID=`ps -ef | grep -w $ZDMB | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===ZDMB process not exists or stop success"
else
kill -9 $P_ID
echo "ZDMB killed success"
fi
;;
xtsz|XTSZ)
P_ID=`ps -ef | grep -w $XTSZ | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===XTSZ process not exists or stop success"
else
kill -9 $P_ID
echo "XTSZ killed success"
fi
;;
qbsj|QBSJ)
P_ID=`ps -ef | grep -w $QBSJ | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===QBSJ process not exists or stop success"
else
kill -9 $P_ID
echo "QBSJ killed success"
fi
;;
file|FILE)
P_ID=`ps -ef | grep -w $FILE | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===FILE process not exists or stop success"
else
kill -9 $P_ID
echo "FILE killed success"
fi
;;
ptaq|PTAQ)
P_ID=`ps -ef | grep -w $PTAQ | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===PTAQ process not exists or stop success"
else
kill -9 $P_ID
echo "PTAQ killed success"
fi
;;
qyxz|QYXZ)
P_ID=`ps -ef | grep -w $QYXZ | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===QYXZ process not exists or stop success"
else
kill -9 $P_ID
echo "QYXZ killed success"
fi
;;
fxpg|FXPG)
P_ID=`ps -ef | grep -w $FXPG | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===FXPG process not exists or stop success"
else
kill -9 $P_ID
echo "FXPG killed success"
fi
;;
open|OPEN)
P_ID=`ps -ef | grep -w $OPEN | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===OPEN process not exists or stop success"
else
kill -9 $P_ID
echo "OPEN killed success"
fi
;;
esac
;;
restart)
$0 stop $2
sleep 2
$0 start $2
echo "===restart $2 success==="
;;
esac
exit 0
问题
1) /bin/bash^M: 坏的解释器: 没有那个文件或目录
执行shell脚本是报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录
是因为该文件在windows系统上打开过,关闭后其中的空格符号和Linux的不同,导致这个报错,我们可以通过sed命令与正则的配合将文件中的空格符号替换成linux的空格
sed -i 's/\r$//' java.sh
2) -bash: ./java.sh: 权限不够
[root@node37 java]# ./java.sh start
-bash: ./java.sh: 权限不够
chmod +7 java.sh
命令
1)远程从本节点传输文件夹到另一节点,在要传输的文件夹上一级执行下列命令
scp -r java/ root@10.10.10.10:/opt/
2)远程从本节点传输文件到另一节点,在要传输的文件同级目录下执行下列命令
scp eureka-0.0.1.SNAPSHOT.jar root@10.10.10.10:/opt/java
3)查看端口被占用的进程
netstat -anp | grep 8081
4)查看Java程序启动的命令
ps -ef|grep java