前言
springboot项目打成jar包后,可以用【java -jar】去启动,但是一退出命令行,就没了。然后可以用nohub和&控制后台启动和运行,但是还是觉得不够优雅,那还是用脚本吧!
脚本
(注:脚本是我借鉴的,借鉴了这篇文章,侵删)
需要改的地方是API_NAME的变量和JAVA_HOME的变量
#!/bin/sh
## java env
export JAVA_HOME=/usr/java/jdk1.8.0_162
export JRE_HOME=$JAVA_HOME/jre
API_NAME=nginx_test_1-0.0.1-SNAPSHOT
JAR_NAME=$API_NAME\.jar
#PID 代表是PID文件
PID=$API_NAME\.pid
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> ${JAR_NAME} is already running PID=${pid} <<<"
else
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $PID
echo ">>> start $JAR_NAME successed PID=$! <<<"
fi
}
#停止方法
stop(){
#is_exist
pidf=$(cat $PID)
#echo "$pidf"
echo ">>> api PID = $pidf begin kill $pidf <<<"
kill $pidf
rm -rf $PID
sleep 2
is_exist
if [ $? -eq "0" ]; then
echo ">>> api 2 PID = $pid begin kill -9 $pid <<<"
kill -9 $pid
sleep 2
echo ">>> $JAR_NAME process stopped <<<"
else
echo ">>> ${JAR_NAME} is not running <<<"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
else
echo ">>> ${JAR_NAME} is not running <<<"
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
exit 0
运行
运行遇到了问题
# bash nginx_test_1.sh
nginx_test_1.sh:行5: $'\r': 未找到命令
nginx_test_1.sh:行10: $'\r': 未找到命令
nginx_test_1.sh:行12: 未预期的符号 `$'{\r'' 附近有语法错误
'ginx_test_1.sh:行12: `usage() {
是因为从Windows环境copy过去,需要用dos2unix命令转一下
# dos2unix nginx_test_1.sh
dos2unix: 正在转换文件 nginx_test_1.sh 为Unix格式...
如果没有dos2unix,就装一下
# yum install dos2unix
继续运行,看到4个参数,分别是启动,停止,重启,状态,我们分别执行一下看看效果
# bash nginx_test_1.sh
Usage: sh 执行脚本.sh [start|stop|restart|status]
启动
启动srpingboot项目并且输出了pid
# bash nginx_test_1.sh start
>>> start nginx_test_1-0.0.1-SNAPSHOT.jar successed PID=4185 <<<
curl访问一下试试,可以了,是我写的代码
# curl http://127.0.0.1:9090/hello
this is nginx test 1
状态
输出了正在运行的状态以及PID
# bash nginx_test_1.sh status
>>> nginx_test_1-0.0.1-SNAPSHOT.jar is running PID is 4185 <<<
重启
先执行了停止方法,再执行启动方法,并输出了新的PID
# bash nginx_test_1.sh restart
>>> api PID = 4185 begin kill 4185 <<<
>>> nginx_test_1-0.0.1-SNAPSHOT.jar is not running <<<
>>> start nginx_test_1-0.0.1-SNAPSHOT.jar successed PID=4294 <<<
停止
停止了服务
# bash nginx_test_1.sh stop
>>> api PID = 4294 begin kill 4294 <<<
>>> nginx_test_1-0.0.1-SNAPSHOT.jar is not running <<<
curl测一下看能不能访问,好了,已经没了
# curl http://127.0.0.1:9090/hello
curl: (7) Failed to connect to 127.0.0.1 port 9090: 拒绝连接