目录
- 前言
- 一、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 进程号