LINUX上的通⽤的springboot项⽬脚本(启动,停⽌,重启)
⽂章⽬录
前⾔
springboot项⽬⼀般都是打⼀个jar然后放在我们的Linux服务器上边进⾏部署,⼀般我们都会写⼀个java启动脚本,⽅便我们进⾏项⽬的启动,停⽌,重启,提⾼部署效率。今天我们就写⼀个简单的linux下的springboot项⽬的脚本。
⼀、脚本中常⽤命令介绍
1. ps 命令:
查看进程。假如我们要查看java进程,使⽤命令ps -ef | grep java
[root@VM-24-4-centos program]# ps -ef | grep java
root    11439511217:20 pts/0    00:00:16 java -jar /usr/local/program/sms-0.0.1-SNAPSHOT.jar
root    11464381063826017:33 pts/0    00:00:00 grep --color=auto java
或者使⽤ps -aux | grep java
[root@VM-24-4-centos program]# ps -aux | grep java
root    11439512.39.62441752179924 pts/0  Sl  17:20  0:16 java -jar /usr/local/program/sms-0.0.1-SNAPSHOT.jar
root    11462370.00.0154561128 pts/0    R+  17:32  0:00 grep --color=auto java
Linux下显⽰系统进程的命令ps,最常⽤的有ps -ef 和ps aux。这两个到底有什么区别呢?两者没太⼤差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps aux最初⽤到Unix Style中,⽽ps -ef被⽤在System V Style中,两者输出略有不同。现在的⼤部分Linux系统都是可以同时使⽤这两种⽅式的。个⼈推荐ps -ef 这种形式。
2. pwd
输出当前路径
[root@VM-24-4-centos program]# pwd
/usr/local/program
3. echo
输出⽂本或者变量值
[root@VM-24-4-centos program]# echo $JAVA_HOME
/opt/java/jdk1.8.0_311
[root@VM-24-4-centos program]# echo "123"
123
4. nohup
英⽂全称 no hang up(不挂起),⽤于在系统后台不挂断地运⾏命令,退出终端不会影响程序的运⾏。在默认情况下(⾮重定向时),会输出⼀个名叫 nohup.out 的⽂件到当前⽬录下,如果当前⽬录的 nohup.out ⽂件不可写,输出重定向到
$HOME/nohup.out ⽂件中。
[root@VM-24-4-centos program]# nohup java -jar sms-0.0.1-SNAPSHOT.jar > usr/ 2>&1
&
[2]1149114
解释:上边的命令是指启动java项⽬。
nohup表⽰永久运⾏。&表⽰后台运⾏,> 代表将输出结果或者⽇志重定向到 usr/⽂件下
0 – stdin (standard input,标准输⼊)
1 – stdout (standard output,标准输出) 系统默认值是1
2 – stderr (standard error,标准错误输出)
5. kill
杀死正在运⾏的进程,⼀般和ps命令⼀起使⽤,先通过ps命令获取进程编号,再通过kill -9 pid杀死进程
⼆、编写脚本
0.变量介绍
APP_NAME:表⽰你要执⾏的jar包,我的测试的jar包是 sms-0.0.1-SNAPSHOT.jar
#这⾥替换为你⾃⼰的执⾏程序
APP_NAME=sms-0.0.1-SNAPSHOT.jar
APP_DIR:jar包或者程序所在的路径,可以写死,或者使⽤pwd命令获取。使⽤pwd命令要注意⼀定要加上``这个引号。位于键盘Tab上边的按键上。
#jar包所在的路径,使⽤这种⽅式的话不需要将jar包和脚本放在同⼀级⽬录
APP_DIR=/usr/local
或者
#⼀定要加上``这个引号
APP_DIR=`pwd`
1.使⽤说明
使⽤说明很简单,就是告诉⽤户怎么使⽤这个脚本。
⽐如:执⾏命令 sh sms.sh start启动,下边的脚本有详细的注释,就不⼀⼀介绍了。
#使⽤说明,⽤来提⽰输⼊参数
usage(){
# 使⽤sh sms.sh start|stop|restart|status来操作项⽬:启动|停⽌|重启|查看项⽬启动状态
echo"Usage: sh sms.sh [start|stop|restart|status]"
exit1
}
2.检查程序是否运⾏
使⽤命令ps -ef 来查看进程并获取进程编号,如果不存在返回1,存在返回0
#检查程序是否在运⾏
is_exist(){
# 获取进程编号,并将进程编号赋值给pid变量
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk'{print $2}' `
#输出进程编号
echo"ps number is: ${pid}"
#如果不存在返回1,存在返回0
if[ -z "${pid}"];then
return1
else
return0
fi
}
3.启动
先调⽤第⼆步的is_exist看进程号是否存在,存在就输出已经在运⾏,不存在的话使⽤nohup进⾏启动并输出到⽂件下。#启动⽅法
start(){
#调⽤is_exist看进程号是否存在
is_exist
if[$? -eq "0"];then
#存在,输出已经在运⾏
echo"${APP_NAME} is already running. pid=${pid} ."
else
#不存在,使⽤nohup进⾏启动并输出到⽂件下。
nohup java -jar $APP_DIR/$APP_NAME>$APP_ 2>&1&
# 输出程序启动成功
echo"${APP_NAME} start success"
fi
}
4.停⽌
同样先调⽤is_exist⽅法看程序是否在运⾏,运⾏使⽤命令杀死进程,没有运⾏输出序没有在运⾏。
#停⽌⽅法
stop(){
#调⽤is_exist看进程号是否存在
is_exist
if[$? -eq "0"];then
#存在使⽤命令杀掉此程序的进程,pid在is_exist已经获取
kill -9 $pid
else
#不存在输出程序没有在运⾏
echo"${APP_NAME} is not running"
fi
}
5.重启
重启就简单了,先调⽤st停⽌⽅法,再调⽤启动⽅法。
#重启
restart(){
stop
start
}
6.运⾏状态
先调⽤is_exist⽅法看程序是否在运⾏,运⾏输出正在运⾏,没有运⾏输出没有运⾏即可。
#输出运⾏状态
status(){
#调⽤is_exist看进程号是否存在
is_exist
if[$? -eq "0"];then
#运⾏输出正在运⾏
echo"${APP_NAME} is running. Pid is ${pid}"
else
免费永久的linux服务器
#没有运⾏输出没有运⾏
echo"${APP_NAME} is NOT running."
fi
}
6.参数输⼊
根据输⼊参数,选择执⾏对应⽅法,不输⼊则执⾏使⽤说明#根据输⼊参数,选择执⾏对应⽅法,不输⼊则执⾏使⽤说明
case"$1"in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
三、完整脚本和使⽤
完整脚本
#!/bin/bash
#这⾥可替换为你⾃⼰的执⾏程序,其他代码⽆需更改
APP_NAME=sms-0.0.1-SNAPSHOT.jar
APP_DIR=/usr/local/program
#APP_DIR=`pwd`
#使⽤说明,⽤来提⽰输⼊参数
usage(){
echo"Usage: sh sms.sh [start|stop|restart|status]"
exit1
}
#检查程序是否在运⾏
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk'{print $2}' `
echo"ps number is: ${pid}"
#如果不存在返回1,存在返回0
if[ -z "${pid}"];then
return1
else
return0
fi
}
}
#启动⽅法
start(){
is_exist
if[$? -eq "0"];then
echo"${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_DIR/$APP_NAME>$APP_DIR/log.out 2>&1&
#nohup java -jar $APP_DIR/$APP_NAME
echo"${APP_NAME} start success"
fi
}
#停⽌⽅法
stop(){
is_exist
if[$? -eq "0"];then
kill -9 $pid
else
echo"${APP_NAME} is not running"
fi
}
#输出运⾏状态
status(){
is_exist
if[$? -eq "0"];then
echo"${APP_NAME} is running. Pid is ${pid}"
else
echo"${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输⼊参数,选择执⾏对应⽅法,不输⼊则执⾏使⽤说明
case"$1"in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;
;
esac
脚本编写完成后,可以使⽤命令sh xxx.sh执⾏,也可以使⽤./xxx.sh执⾏。sh xxx.sh与./xxx.sh区别
sh xxx.sh 是不需要有执⾏权限

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。