irpas技术客

LINUX上的通用的springboot项目脚本(启动,停止,重启)_壹升茉莉清_springboot 脚本启动

网络 4065

文章目录 前言一、脚本中常用命令介绍二、编写脚本0.变量介绍1.使用说明2.检查程序是否运行3.启动4.停止5.重启6.运行状态6.参数输入 三、完整脚本和使用完整脚本脚本执行


前言

springboot项目一般都是打一个jar然后放在我们的Linux服务器上边进行部署,一般我们都会写一个java启动脚本,方便我们进行项目的启动,停止,重启,提高部署效率。今天我们就写一个简单的linux下的springboot项目的脚本。

一、脚本中常用命令介绍 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 这种形式。

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

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,标准错误输出)

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

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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #springboot #脚本启动 #一脚本中常用命令介绍ps #命令查看进程