目录
- 前言
- 一、Maven打包
- 1.1 删除test文件和对应依赖(不建议)
- 1.2 pom.xml中配置跳过测试
- 1.3 使用idea打包
- 1.4 使用maven命令打包
 
- 二、启动jar包
- 2.1 简单启动
- 2.2 后台运行并打印日志
- 2.3 脚本启动
 
- 三、查看日志
- 3.1 tail命令查看日志
- 3.2 cat命令查看日志
 
- 四、其他操作
- 4.1 jps命令查看进程
- 4.2 ps查询进程
- 4.3 查看端口占用
 
前言
在项目开发完成后,需要把项目发布到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 进程号



















