linux部署java程序启动停止脚本

linux部署java程序启动停止脚本


本脚本使用于java离线lib依赖项目。配置文件位于conf中。

1:启动start

Java jar包启动程序vim start.sh

#!/bin/bash

APP_NAME=name.jar   #配置自己的jar包名字
BASE_HOME=$(cd $(dirname $0); pwd)
echo "${BASE_HOME}"
PID=`ps aux|grep ${APP_NAME}|grep -v grep|awk '{print $2}'`

if [ "X$PID" != "X" ]				 #判断程序运行状态
then
    echo "$APP_NAME already started,pid=$PID"
    exit 0
fi


#启动方法指定运行的内存、jar包的名称
nohup java
-XX:MetaspaceSize=128M \
-XX:MaxMetaspaceSize=128M  \
-Xms1024m -Xmx1024m  \ 
 -jar ${APP_NAME} > log.log 2>&1 &

lib和源码分离的启动命令

#!/bin/sh

BASE="$(dirname $(readlink -f $0))"       #获取当前程序部署目录
APPNAME=$BASE/
LIB_PATH="$BASE/lib"                #获取lib目录
CONF=$BASE/conf						#获取conf配置文件目录
APPJAR=KafkaMessToLocal.jar         #打包的程序jar包名
if [ ! -d $LIB_PATH ]              
then
	echo "ERROR:$LIB_PATH not exists"
	exit -1 
fi

_BASE=${BASE//\//\\\/}
_LIB_PATH=${LIB_PATH//\//\\\/}
PID=`ps aux|grep $APPNAME|grep -v grep|awk '{print $2}'`
if [ "X$PID" != "X" ]				 #判断程序运行状态
then
    echo "$APPNAME already started,pid=$PID"
    exit 0
fi

export PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$APPJAR:$CONF           #将程序需要的jar,conf配置加载到环境变量中
for i in $BASE/lib/*/*.jar; 
  do 
     CLASSPATH="$CLASSPATH":$i; 
  done 

echo $CLASSPATH

nohup java -server -Xms32g -Xmx32g -XX:+UseG1GC -XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:OnOutOfMemoryError="kill -9 %p" 
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:logs/gc.log 
-cp $CLASSPATH process.enige &

2:停止stop

vim stop.sh

#!/bin/sh
BASE="$(dirname $(readlink -f $0))"       #获取当前程序部署目录和程序运行名
APPNAME=$BASE/               
ps aux|grep $APPNAME|grep -v grep|awk '{print $2}'|xargs kill -9

3:一键启停restart

vim restart.sh
其中的BASE_PATH=jar包所在目录
SERVER_NAME=jar包名称

#!/bin/bash

DATE=$(date +%Y%m%d%H%M)
# 基础路径
BASE_PATH=/opt/app/pro
# 服务名称。同时约定部署服务的 jar 包名字也为它。
SERVER_NAME=proc
# 环境
PROFILES_ACTIVE=local

# heapError 存放路径
HEAP_ERROR_PATH=$BASE_PATH/heapError
# JVM 参数
JAVA_OPS="-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH"

# SkyWalking Agent 配置
#export SW_AGENT_NAME=$SERVER_NAME
#export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.84:11800
#export SW_GRPC_LOG_SERVER_HOST=192.168.0.84
#export SW_AGENT_TRACE_IGNORE_PATH="Redisson/PING,/actuator/**,/admin/**"
#export JAVA_AGENT=-javaagent:/work/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar

# 停止:优雅关闭之前已经启动的服务
function stop() {
	echo "[stop] 开始停止 $BASE_PATH/$SERVER_NAME"
	PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
	# 如果 Java 服务启动中,则进行关闭
	if [ -n "$PID" ]; then
		# 正常关闭
		echo "[stop] $BASE_PATH/$SERVER_NAME 运行中,开始 kill [$PID]"
		kill -15 $PID
		# 等待最大 120 秒,直到关闭完成。
		for ((i = 0; i < 120; i++)); do
			sleep 1
			PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
			if [ -n "$PID" ]; then
				echo -e ".\c"
			else
				echo '[stop] 停止 $BASE_PATH/$SERVER_NAME 成功'
				break
			fi
		done

		# 如果正常关闭失败,那么进行强制 kill -9 进行关闭
		if [ -n "$PID" ]; then
			echo "[stop] $BASE_PATH/$SERVER_NAME 失败,强制 kill -9 $PID"
			kill -9 $PID
		fi
	# 如果 Java 服务未启动,则无需关闭
	else
		echo "[stop] $BASE_PATH/$SERVER_NAME 未启动,无需停止"
	fi
}

# 启动:启动后端项目
function start() {
	# 开启启动前,打印启动参数
	echo "[start] 开始启动 $BASE_PATH/$SERVER_NAME"
	echo "[start] JAVA_OPS: $JAVA_OPS"
	echo "[start] JAVA_AGENT: $JAVA_AGENT"
	echo "[start] PROFILES: $PROFILES_ACTIVE"

	# 开始启动
	nohup java -server $JAVA_OPS $JAVA_AGENT -jar $BASE_PATH/$SERVER_NAME.jar --spring.profiles.active=$PROFILES_ACTIVE >nohup.out 2>&1 &
	echo "[start] 启动 $BASE_PATH/$SERVER_NAME 完成"
}

# 部署
function deploy() {
	cd $BASE_PATH
	# 第一步:停止 Java 服务
	stop
	# 第二步:启动 Java 服务
	start
}

deploy

4:部署网站类静态war包项目

war包是一个web模块,可以直接运行,一般开发好的网站,打包后部署到tomcat的网站根目录下,然后重启tomcat,这个包就可以自动解压,相当于代码发布。

war包是java web程序打的包

war包里包括: - 代码编译成的 class文件 - 依赖包 - 配置文件 - html,jsp

步骤:
1、docker部署tomcat

拉取镜像docker pull tomcat:9.0.56-jdk8-temurin-focal
启动:docker run -di --name=tomcat -p 8888:8080 -v /opt/mount/tomcat/webapps:/usr/local/tomcat/webapps tomcat:9.0.56-jdk8-temurin-focal

2、将打包的项目war包上传到/opt/mount/tomcat/webapps目录下
3、重启tomcat:docker restart tomcat
4、访问你的网站,我映射的是8888端口,则网站输入ip:port/后面需要跟上你的war包的名称
5、命名规则:需要注意的点,为了保证访问不报错让war包的login登录首页跳转的页面地址改为和项目名称一样,不然可能出现报错源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表

在这里插入图片描述
login.jsp
在这里插入图片描述

5:docker部署jar包项目

利用docker file构建镜像实现启动

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值