废话不多说,直接上脚本,我这里是以spring cloud项目做的示例。
#!/bin/sh
export EUREKA=family-eureka-1.0.0.jar
export GATEWAY=family-gateway-1.0.0.jar
export AUTH=family-auth-1.0.0.jar
export SYSTEM=family-system-1.0.0.jar
export FINANCE=familyFinance-1.0.0.jar
export BABY=familyBaby-1.0.0.jar
export HOME=familyHome-1.0.0.jar
export LOG=familyLog-1.0.0.jar
export EUREKA_port=8761
export GATEWAY_port=8762
export AUTH_port=8763
export SYSTEM_port=8764
export FINANCE_port=8765
export BABY_port=8766
export HOME_port=8767
export LOG_port=8768
case "$1" in
start)
## 启动EUREKA
echo "--------eureka 开始启动--------------"
nohup java -jar $EUREKA >/data/project/family/log/family-eureka.out &
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 启动成功--------------"
## 启动GATEWAY
echo "--------开始启动GATEWAY---------------"
nohup java -jar $GATEWAY >/data/project/family/log/family-gateway.out &
GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$GATEWAY_pid" ]
do
GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`
done
echo "GATEWAY pid is $GATEWAY_pid"
echo "---------GATEWAY 启动成功-----------"
## 启动AUTH
echo "--------开始启动AUTH---------------"
nohup java -jar $AUTH >/data/project/family/log/family-auth.out &
AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$AUTH_pid" ]
do
AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`
done
echo "AUTH pid is $AUTH_pid"
echo "---------AUTH 启动成功-----------"
## 启动SYSTEM
echo "--------开始启动 SYSTEM---------------"
nohup java -jar $SYSTEM >/data/project/family/log/family-system.out &
SYSTEM_pid=`lsof -i:$SYSTEM_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$SYSTEM_pid" ]
do
SYSTEM_pid=`lsof -i:$SYSTEM_port|grep "LISTEN"|awk '{print $2}'`
done
echo "SYSTEM pid is $SYSTEM_pid"
echo "---------SYSTEM 启动成功-----------"
## 启动FINANCE
echo "--------开始启动 FINANCE---------------"
nohup java -jar $FINANCE >/data/project/family/log/family-finance.out &
FINANCE_pid=`lsof -i:$FINANCE_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$FINANCE_pid" ]
do
FINANCE_pid=`lsof -i:$FINANCE_port|grep "LISTEN"|awk '{print $2}'`
done
echo "FINANCE pid is $FINANCE_pid"
echo "---------FINANCE 启动成功-----------"
## 启动BABY
echo "--------开始启动 BABY---------------"
nohup java -jar $BABY >/data/project/family/log/family-baby.out &
BABY_pid=`lsof -i:$BABY_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$BABY_pid" ]
do
BABY_pid=`lsof -i:$BABY_port|grep "LISTEN"|awk '{print $2}'`
done
echo "BABY pid is $BABY_pid"
echo "---------BABY 启动成功-----------"
## 启动HOME
echo "--------开始启动 HOME---------------"
nohup java -jar $HOME >/data/project/family/log/family-home.out &
HOME_pid=`lsof -i:$HOME_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$HOME_pid" ]
do
HOME_pid=`lsof -i:$HOME_port|grep "LISTEN"|awk '{print $2}'`
done
echo "HOME pid is $HOME_pid"
echo "---------HOME 启动成功-----------"
## 启动LOG
echo "--------开始启动 LOG---------------"
nohup java -jar $LOG >/data/project/family/log/family-log.out &
LOG_pid=`lsof -i:$LOG_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$LOG_pid" ]
do
LOG_pid=`lsof -i:$LOG_port|grep "LISTEN"|awk '{print $2}'`
done
echo "LOG pid is $LOG_pid"
echo "---------LOG 启动成功-----------"
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 $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
P_ID=`ps -ef | grep -w $AUTH | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===AUTH process not exists or stop success"
else
kill -9 $P_ID
echo "AUTH killed success"
fi
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
P_ID=`ps -ef | grep -w $FINANCE | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===FINANCE process not exists or stop success"
else
kill -9 $P_ID
echo "FINANCE killed success"
fi
P_ID=`ps -ef | grep -w $BABY | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===BABY process not exists or stop success"
else
kill -9 $P_ID
echo "BABY killed success"
fi
P_ID=`ps -ef | grep -w $HOME | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===HOME process not exists or stop success"
else
kill -9 $P_ID
echo "HOME killed success"
fi
P_ID=`ps -ef | grep -w $LOG | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===LOG process not exists or stop success"
else
kill -9 $P_ID
echo "LOG killed success"
fi
echo "===stop success==="
;;
restart)
$0 stop
sleep 2
$0 start
echo "===restart success==="
;;
esac
exit 0
将以上脚本保存到文本,命名为shellTest.sh,内容可根据你的业务需求自行改造。
我这里给一个我在服务器上的文件夹设置。
log是存放输入控制台打印的内容的,如果不想占用磁盘空间,不输入日志,可以修改脚本中的“/data/project/family/log/family-eureka.out” 改成 “/dev/null 2>&1”
这里需要注意一个问题,将shellTest放到服务器上后,别急着启动,需要先做一步解决编码问题,不然启动会报“syntax error near unexpected token `in”
输入以上命令后,就会生成新的脚本文件family.sh,此时可以去启动family.sh了。
好了,到这里我们可以看到,项目已经全部启动了,并且控制台打印的信息也都输出到我指定的log文件夹中。
补充:操作脚本的命令
启动:sh family.sh strat
停止:sh family.sh stop
重新:sh family.sh restart