1.Java项目启动脚本
image-20250730151143131
因为公司目前有些项目仍然采用裸机部署的方式,所以有些Java项目还需要使用脚本启动。以下为启动脚本内容(公司内部所有裸机部署的项目都采用此脚本,如需使用请按照自己项目进行调整)
#!/bin/bash
# 这里是查找并拼接目录(注意一个在项目文件夹中只能有一个jar后缀名文件)
CURRENT_PATH=$(cd "$(dirname "$0")"; pwd)
cd $CURRENT_PATH
JAR=$(find $CURRENT_PATH -maxdepth 1 -name "*.jar")
PID=$(ps -ef | grep $JAR | grep -v grep | awk '{ print $2 }')
# 设置变量作为启动时的参数
MAXJAVA="-Xms2g"
STARTJAVA="-Xmx2g"
HDOOOME="-XX:+HeapDumpOnOutOfMemoryError -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
# 这里是skywalking代理的变量配置(可以忽略)
#JAVA_AGENT=-javaagent:/usr/local/monitor/skywalking-java-agent-8.16.0/skywalking-agent.jar
#AGENT_NAME=-Dskywalking.agent.service_name=CN-Mailbase::CN-Mailbase-22
# 这里是java环境变量
export JAVA_HOME=/usr/local/jdk17
export PATH=$JAVA_HOME/bin:$PATH
if [ x$2 != x ]; then
MAXJAVA=$2
fi
if [ x$3 != x ]; then
STARTJAVA=$3
fi
# 这里是设置启动脚本后面跟随的启动参数start(启动)|stop(停止)|restart(重启)|status(查看状态)
case "$1" in
start)
if [ ! -z "$PID" ]; then
echo "$JAR Already started, process number: $PID"
else
echo -n -e "starting $JAR ... \n"
nohup java -Dloader.path=resources/*,lib/* $MAXJAVA $STARTJAVA $HDOOOME -jar $JAR --spring.profiles.active=prod > /dev/null 2>&1 &
if [ "$?"="0" ]; then
echo "Startup is complete, please check the log to ensure success"
else
echo "Startup failed"
fi
fi
;;
stop)
if [ -z "$PID" ]; then
echo "$JAR Not running, no need to close"
else
echo "stoping $JAR ..."
kill -9 $PID
if [ "$?"="0" ]; then
echo "stop success"
else
echo "stop failed"
fi
fi
;;
restart)
${0} stop
${0} start
;;
status)
if [ ! -z "$PID" ]; then
echo "$JAR running"
else
echo "$JAR not running"
fi
;;
*)
echo "Usage: ./springboot {start|stop|restart|status}" >&2
exit 1
esac
使用方法
# 拷贝脚本到项目目录
root@JD-CN-Service-xx2:/project/xx-xx# tree -L 1
.
├── deployjar.sh
├── deploylib.sh
├── deploy.sh
├── xx-xx.jar # 项目jar
├── lib # 项目lib(目前公司打包会把lib分离出来)
├── logs
├── resources
└── script.sh # 启动脚本
# 启动方式
./script.sh start
# 停止方式
./script.sh start
# 重启方式
./script.sh restart
# 查看状态
./script.sh status
2.项目部署脚本(已经打包到指定文件夹!!!!!)
公司裸机部署的项目在打包的过程中会将项目jar和依赖lib进行分离,在有些情况下lib中的依赖是不会更新的,只需要更新一下项目jar即可,所以我设置了2个脚本给jenkins使用,请注意在使用脚本前我已经将项目通过jenkins打包并上传到了服务器的指定文件夹下!!!!
# 项目目录
root@JD-CN-Service-xx2:/project/xx-xx# tree -L 1
.
├── deployjar.sh # 直接部署jar
├── deploylib.sh # 带有lib部署
├── deploy.sh
├── xx-xx.jar # 项目jar
├── lib # 项目lib(目前公司打包会把lib分离出来)
├── logs
├── resources
└── script.sh # 启动脚本
# 直接部署jar
#!/bin/bash
# 这里是注销配置中心Consul中的服务状态(目前这个项目不需要注销)
#echo "Remove from consul"
#curl -X PUT http://127.0.0.1:8500/v1/agent/service/maintenance/xxxx?enable=true
#sleep 30s
echo "Stop service"
cd /project/xxxn # 进入项目目录
./script.sh stop # 使用脚本停止服务
sleep 3
echo "Clear Dump_file"
find /project/old-release/xxxxx/ -mindepth 1 -mtime +1 -exec rm -rf {} ; # 清理1天前的项目部署备份,这里我每次在部署前会将老项目进行备份到这目录,这个目录容易很大所以我设置了在部署时查看此目录,如果里面文件超过了1天就删除,这个时间可以根据你的需要定制
sleep 3
echo "Move project to dump" # 这里是先将停止服务的项目jar移动到备份目录进行压缩,然后再删除,防止项目有问题的时候需要回滚
mv /project/xxx/xxxx.jar /project/old-release/xxxxx/
cd /project/old-release/xxxxxx/
tar zcvf xxxxxx.tar.gz_$(date +%Y-%m-%d-%H-%M-%S) xxxxxx.jar
rm -rf /project/old-release/xxxxxx/xxxxxx.jar
sleep 3
echo "tar new jar"
tar zxf /project/pre-release/xxxxxx/xxxxxx.tar.gz -C /project/xxxxxx/
sleep 3
echo "Start service"
cd /project/xxxxxx
./script.sh restart
# 这里是项目启动后向consul注册相关服务
#echo "Add to consul"
#while true; do
# curl -s --connect-timeout 2 http://127.0.0.1:xxxxx/xxxxx/ 2>&1 > /dev/null
# if [ $? -eq 0 ];then
# break
# fi
# sleep 10s
#done
#
#curl -X PUT http://127.0.0.1:8500/v1/agent/service/maintenance/xxxxxx?enable=false
# 带有lib部署(这里我就不在赘述了,只是备份的时候多了一个lib)
#!/bin/bash
#echo "Remove from consul"
#curl -X PUT http://127.0.0.1:8500/v1/agent/service/maintenance/xxxxxx?enable=true
#sleep 30s
echo "Stop service"
cd /project/xxxxxx
./script.sh stop
sleep 3
echo "Clear Dump_file"
find /project/old-release/xxxxxx/ -mindepth 1 -mtime +1 -exec rm -rf {} ;
sleep 3
echo "Move project to dump"
mv /project/xxxxxx/xxxxxx.jar /project/old-release/xxxxxx/
mv /project/xxxxxx/lib /project/old-release/xxxxxx/
cd /project/old-release/xxxxxx/
tar zcvf xxxxxx.tar.gz_$(date +%Y-%m-%d-%H-%M-%S) xxxxxx.jar lib
rm -rf /project/old-release/xxxxxx/xxxxxx.jar && rm -rf /project/old-release/xxxxxx/lib
sleep 3
echo "tar new jar"
tar zxf /project/pre-release/xxxxxx/xxxxxx.tar.gz -C /project/xxxxxx/
sleep 3
echo "Start service"
cd /project/xxxxxx
./script.sh restart
#echo "Add to consul"
#while true; do
# curl -s --connect-timeout 2 http://127.0.0.1:9327/xxxxxx/ 2>&1 > /dev/null
# if [ $? -eq 0 ];then
# break
# fi
# sleep 10s
#done
#
#curl -X PUT http://127.0.0.1:8500/v1/agent/service/maintenance/xxxxxx?enable=false