springboot启动脚本

#!/bin/bash

#通常用作注释,#和!连在一起并且放在首行表示该脚本由什么去解释,标志着这是一个shell script

详细解释:https://kknews.cc/code/96vkgol.html

echo "测试打印输出"

echo是linux下的打印输出命令,命令的输出内容如果没有特殊含义,则原内容输出到屏幕;如果输出内容有特殊含义,则输出打印其含义

更多使用方式:http://c.biancheng.net/view/934.html

  • $0 : 编写的shell脚本本身的名字
  • $1 : 运行shell脚本传的第一个参数
  • $2 : 运行shell脚本传的第二个参数
  • $? : 上条命令的返回值  0:表示没有错误,其他任何数值:表示有错误
  • $!  : 后台运行的最后一个进程的 ID 号 

更多使用方式:https://www.jb51.net/article/220865.htm

判断服务是否已开启:通过ps命令查看服务是否正在运行,以查询mysql为例

如果存在查询结果则表示服务正在运行,已开启

appName=mysql
port=3306
ps -ef | grep $appName| grep $port| grep -v grep | grep -v sudo

grep -v 参数 : 过滤掉指定参数的查询结果  例如grep -v grep 过滤掉查询结果中包含grep的

查询到服务的进程信息后如上图所示

列名从左到右依次是UID       PID       PPID      C     STIME    TTY       TIME         CMD

pid即进程id,我们可以通过pid是否存在  判断  服务是否正在运行

获取进程id,我们可以清楚的看到pid在查询结果信息的第二列

pid=$(ps -ef | grep $appName | grep $port  | grep -v grep | grep -v sudo | awk '{print $2}') 

awk '{print $2}' 是获取当前行的第二列,也就是pid

那么如果查询结果pid不为空则说明服务已开启

在中括号里通过-z判断值是否为空    更多使用方式:https://www.jb51.net/article/186182.htm

变量的值,为空,返回0,为true

变量的值,非空,返回1,为false

if [ -z "$pid" ]
then
	echo "服务没有运行"
else
	echo "服务正在运行"
fi

稍稍改造下,写个简单完整的启动脚本

#!/bin/bash
#jar包名称
appName=test01
#服务端口号
port=8888
#查询服务是否正在运行
pid=$(ps -ef | grep $appName | grep $port  | grep -v grep | grep -v sudo | awk '{print $2}') 

if [ -z "$pid" ]
then
	nohup java -Xmx1g -Xms1g -jar -Dserver.port=$port  -Dspring.profiles.active=dev -Dlogging.path=./logs /home/data/app/test01/$appName.jar 1>/dev/null 2>/dev/null &
else
	kill -9 $pid
	nohup java -Xmx1g -Xms1g -jar -Dserver.port=$port  -Dspring.profiles.active=dev -Dlogging.path=./logs /home/data/app/test01/$appName.jar 1>/dev/null 2>/dev/null &
fi

将脚本上传到服务器上,如果提示没有权限运行,可以查看是否有读写权限

ls -l test.sh

chmod 777 test.sh 

nohup命令

方式一:java -jar  xxx.jar  这种方式启动是在前台运行,命令行会被占用,即当前ssh窗口会被锁定 持续输出运行信息,这样我们就不能在这个窗口下执行其他命令,如果要继续在当前窗口下操作命令,按下ctrl+c 打断程序的运行,这种方式启动关闭窗口也会终止程序

方式二:java -jar xxx.jar & 这种方式启动是后台运行(&),命令行不会被占用 但是关闭当前窗口,程序会被终止

方式三:nohup java -jar xxx.jar & 后台启动,命令行不会被占用,关闭窗口也不会终止程序nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行,当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件

nohup java -jar xxx.jar >/dev/null 2>&1 & 

>/dev/null 2>&1是将标准输出和错误输出都重定向/dev/null,/dev/null可以理解为垃圾桶、黑洞,将无用的输出都重定向到这里,程序运行产生的日志我们通过日志框架的相应策略放到指定位置

注:1>/dev/null 2>/dev/null 和 >/dev/null 2>&1含义相同,只是写法不同

详细介绍:https://www.jb51.net/article/169837.htm

你可能感兴趣的