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     1143951       1  2 17:20 pts/0    00:00:16 java -jar /usr/local/program/sms-0.0.1-SNAPSHOT.jar
root     1146438 1063826  0 17: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     1143951  2.3  9.6 2441752 179924 pts/0  Sl   17:20   0:16 java -jar /usr/local/program/sms-0.0.1-SNAPSHOT.jar
root     1146237  0.0  0.0  15456  1128 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 这种形式。

  1. pwd
    输出当前路径
[root@VM-24-4-centos program]# pwd
/usr/local/program
  1. 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

  1. 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/local/sms.txt 2>&1 &
    [2] 1149114
    

    解释:上边的命令是指启动java项目。

    nohup表示永久运行。&表示后台运行,> 代表将输出结果或者日志重定向到 usr/local/sms.txt文件下

    0 – stdin (standard input,标准输入)
    1 – stdout (standard output,标准输出) 系统默认值是1
    2 – stderr (standard error,标准错误输出)

  2. 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]"
 exit 1
}

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
 return 1
 else
 return 0
 fi
}

3.启动

先调用第二步的is_exist看进程号是否存在,存在就输出已经在运行,不存在的话使用nohup进行启动并输出到sms.txt文件下。

#启动方法
start(){
#调用is_exist看进程号是否存在
 is_exist
 if [ $? -eq "0" ]; then
 #存在,输出已经在运行
 echo "${APP_NAME} is already running. pid=${pid} ."
 else
  #不存在, 使用nohup进行启动并输出到sms.txt文件下。
 nohup java -jar $APP_DIR/$APP_NAME > $APP_DIR/sms.txt 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
 #没有运行输出没有运行
 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]"
 exit 1
}
 
#检查程序是否在运行
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
 return 1
 else
 return 0
 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 是不需要有执行权限

./xxx.sh 是需要有执行权限的,可以通过 chmod +x xxx.sh 赋予权限。

脚本执行

我的已经授权,所以我可以使用/xxx.sh执行。

先看一下java程序是否启动:

[root@VM-24-4-centos program]# ps -ef | grep java
root     1161218 1063826  0 18:49 pts/0    00:00:00 grep --color=auto java

没有启动,接下来我们来启动:

[root@VM-24-4-centos program]# ./sms.sh start
ps number is: 
sms-0.0.1-SNAPSHOT.jar start success
[root@VM-24-4-centos program]# ps -ef | grep java
root     1161430       1 95 18:50 pts/0    00:00:04 java -jar /usr/local/program/sms-0.0.1-SNAPSHOT.jar
root     1161452 1063826  0 18:50 pts/0    00:00:00 grep --color=auto java

启动成功。我们再停止:

[root@VM-24-4-centos program]# ./sms.sh stop
ps number is: 1161430
[root@VM-24-4-centos program]# ps -ef | grep java
root     1161647 1063826  0 18:51 pts/0    00:00:00 grep --color=auto java

停止了,我们先启动,在进行重启:

[root@VM-24-4-centos program]# ./sms.sh start
ps number is: 
sms-0.0.1-SNAPSHOT.jar start success
[root@VM-24-4-centos program]# ./sms.sh restart
ps number is: 1161829
ps number is: 
sms-0.0.1-SNAPSHOT.jar start success
[root@VM-24-4-centos program]# ps -ef | grep java
root     1161862       1 99 18:52 pts/0    00:00:04 java -jar /usr/local/program/sms-0.0.1-SNAPSHOT.jar
root     1161881 1063826  0 18:52 pts/0    00:00:00 grep --color=auto java

到这里,我们的脚本已经验证完毕,收工!有任何问题,欢迎探讨!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

壹升茉莉清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值