springboot项目打jar包发布上线、查看日志和进程号


前言

在项目开发完成后,需要把项目发布到Linux服务器上,在没使用到Jenkins时,项目的部署的步骤是怎么样的呢?


一、Maven打包

都知道maven的package命令是可以打成jar包的,但是在发布项目时,服务器上的路径或者数据库地址都是不一样的(打印日志的logback.xml的存放路径,或者数据库的连接地址不一致),因为package命令执行时会包含test。
在这里插入图片描述
空 contextLoads () 是验证应用程序是否能够成功加载 Spring 上下文的测试,相当于启动下项目能不能成功。

1.1 删除test文件和对应依赖(不建议)

在这里插入图片描述

1.2 pom.xml中配置跳过测试

<build>
    <plugins>
        <!-- maven 打包时跳过测试 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

1.3 使用idea打包

在这里插入图片描述

1.4 使用maven命令打包

mvn package -Dmaven.test.skip=true

打包成功后,在项目路径下的target目录下会生产jar包,把jar包通过ssh客户端拖到服务器上。

二、启动jar包

java -jar是启动jar包的命令,来看看还有那些有用的参数。

2.1 简单启动

java -jar /opt/project/test-demo.jar 

在这里插入图片描述
此时可以使用Ctrl+C打断程序运行,关闭窗口程序退出。

2.2 后台运行并打印日志

运行命令:

nohup java -jar /opt/project/test-demo.jar --spring.config.location=/opt/project/config/test-demo.yml -Dserver.port=8082 > /opt/project/logs/demo.log 2>&1 &

参数解释

#(no hang up)不挂断,当账户退出或终端关闭时,程序仍然运行
nohup  
# 运行jar包
java -jar  
# 设置最大java堆大小
-Xmx256m 
# 设置初始java堆大小
-Xms256m
# 指定配置文件,可覆盖jar包内部配置
--spring.config.location 
# 指定端口号
-Dserver.port=8082 
# 指定配置文件
--spring.profiles.active=prod
# 在shell中,0表示标准输入,1表示标准输出,2表示标准错误
# 【> file】 表示将标准输出输出到demo.log中
> /opt/project/logs/demo.log 
# 相当于
1> /opt/project/logs/demo.log 
# 2>&1中&则表示等同于,即标准错误也输出到标准输出中
> 2>&1 
# 后台运行
&

不知道有没有想过或者试过运行的服务删除掉对应的jar包后是什么情况,服务还能访问吗?
答:jar包删除后,服务还能访问,只要某个进程仍在使用该文件,Linux就不会完全删除它。只有当最后一个用户终止或关闭该文件时,它才会完全消失。

2.3 脚本启动

demo.sh

#!/bin/sh
# 指定JAR包文件夹,将来运行的时候,此文件需要与jar包同级
AppName=你的jar包名字.jar
Timezone=Asia/Shanghai
#运行端口
ServerPort=8088
#激活application-pro.properties配置文件
ProfilesActive=pro
# JVM参数
JVM_OPTS="-Dname=$AppName  -Duser.timezone=$Timezone -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC -Dspring.profiles.active=$ProfilesActive -Dserver.port=$ServerPort"
# 此变量会获取到当前路径
APP_HOME=`pwd`
# 日志路径 一定要有此路经的文件夹,没有此路径的文件夹,将不会有日志文件:$AppName.log,记得创建logs文件夹。
LOG_PATH=$APP_HOME/logs/$AppName.log
# 获取第一个参数 如果为空,将会提示这个
if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi
# 如果没有指定JAR包,将会提示这个
if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi
# start方法
function start(){
    # 获取PID,最后打印出结果$2 就是PID 注意,此处$2不是我们运行此脚本的第二个参数($0 不算做第一个参数)!
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`

	if [ x"$PID" != x"" ]; then
	    echo "$AppName is running..."
	else
		nohup java -jar  $JVM_OPTS $AppName > $LOG_PATH 2>&1 &
		echo "Start $AppName success..."
	fi
}
# stop方法
function stop(){
    echo "Stop $AppName"

	PID=""
	# 定制查询服务PID的方法
	query(){
		PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
	}
	# 第一次查询状态,更变PID
	query

	if [ x"$PID" != x"" ]; then
		kill -TERM $PID
		echo "$AppName (pid:$PID) exiting..."
		while [ x"$PID" != x"" ]
		do
			# 间隔1秒执行后续代码
			sleep 1
			# 这是一个死循环,检查每一次PID,都会更变PID的最新结果,如果PID等于空了,就结束循环,输出结束
			query
		done
		echo "$AppName exited."
	else
		echo "$AppName already stopped."
	fi
}

function restart(){
    # 先停止服务,然后等待5秒后,再次重启服务
    stop
    sleep 5
    start
}

function status(){
    # 获取PID
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
    # 如果PID为0,代表服务器停止,不为0,就代表服务器正在运行
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}
# 获取第一个参数,执行不同的方法!
case $1 in
    start)
    	start
    	;;
    stop)
    	stop
    	;;
    restart)
    	restart
    	;;
    status)
    	status
    	;;
    *)
# case的结束标志
esac

创建demo.sh后,需要给脚本权限

chmod 777 demo.sh

启动服务

./demo.sh start 

停止服务

./demo.sh start 

三、查看日志

3.1 tail命令查看日志

显示日志最后10行
tail -n 10 demo.log

实时监控显示日志最后10行
tail -10f demo.log

3.2 cat命令查看日志

搜索关键字,-n显示行数

cat -n filename | grep "关键字"

显示日志里匹配OutOfMemoryError那行已经前后10行

cat filename | grep -C 10 OutOfMemoryError

四、其他操作

4.1 jps命令查看进程

jps命令是JDK提供的一个命令行工具,用来显示当前所有java虚拟机的进程信息。

jps -mlvV
  • -m:显示Java虚拟机启动时传递给main()方法的参数。
  • -l:显示主类的完整包名,如果进程执行的是JAR文件,也会显示JAR文件的完整路径。
  • -v:显示Java虚拟机启动时传递的JVM参数。
  • -V:不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。
    在这里插入图片描述

4.2 ps查询进程

查询java进程
ps -ef | grep java

查询java进程排除当前进程
ps -ef | grep java | grep -v grep

4.3 查看端口占用

netstat -tunlp | grep 8080
在这里插入图片描述
如果使用netstat报错
-bash: netstat: command not found

【解决方法】

yum install net-tools

关闭进程 kill -9 进程号


 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值