当前位置:   article > 正文

LINUX上的通用的springboot项目脚本(启动,停止,重启)_linux springboot git 重启脚本

linux springboot git 重启脚本


前言

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
  • 1
  • 2
  • 3

或者使用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
  • 1
  • 2
  • 3

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
  • 2
  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
  • 2
  • 3
  • 4
  • 5
  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
    
    • 1
    • 2

    解释:上边的命令是指启动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
  • 1
  • 2

APP_DIR:jar包或者程序所在的路径,可以写死,或者使用pwd命令获取。使用pwd命令要注意一定要加上``这个引号。位于键盘Tab上边的按键上。

#jar包所在的路径,使用这种方式的话不需要将jar包和脚本放在同一级目录
APP_DIR=/usr/local
  • 1
  • 2

或者

#一定要加上``这个引号
APP_DIR=`pwd`
  • 1
  • 2

1.使用说明

使用说明很简单,就是告诉用户怎么使用这个脚本。
比如:执行命令 sh sms.sh start启动,下边的脚本有详细的注释,就不一一介绍了。

#使用说明,用来提示输入参数
usage() {
# 使用sh sms.sh start|stop|restart|status来操作项目:启动|停止|重启|查看项目启动状态
 echo "Usage: sh sms.sh [start|stop|restart|status]"
 exit 1
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5.重启

重启就简单了,先调用st停止方法,再调用启动方法。

#重启
restart(){
 stop
 start
}
  • 1
  • 2
  • 3
  • 4
  • 5

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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

6.参数输入

根据输入参数,选择执行对应方法,不输入则执行使用说明

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
 "start")
 start
 ;;
 "stop")
 stop
 ;;
 "status")
 status
 ;;
 "restart")
 restart
 ;;
 *)
 usage
 ;;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

三、完整脚本和使用

完整脚本

#!/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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83

脚本编写完成后,可以使用命令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
  • 1
  • 2

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

[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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

启动成功。我们再停止:

[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
  • 1
  • 2
  • 3
  • 4

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

[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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/771919
推荐阅读
相关标签
  

闽ICP备14008679号