使用 Shell 部署 jar 包
SpringBoot 项目部署到服务器,首先我们需要将项目打成 jar 包,然后上传到服务器上,使用 shell 部署 jar 包。
使用shell部署jar
- 新建 deploy.sh (文末),然后将 jar 包和本 shell 放在同一目录
- 执行
chmod u+x deploy.sh
执行
./deploy.sh aaa.jar pro log
参数1,jar包完整名称(带.jar)
参数2,运行环境如pro
参数3,日志目录(输入的目录不存在会自动创建)
停止运行
使用命令行找出正在运行的jar 的进程id
ps -ef | grep aaa.jar
杀进程
kill -9 进程id
注意事项
- 先执行
whereis bash
,目录如果不是/usrbin/bash
,就替换shell第一行的bash地址声明 - 如果无权限,使用 vim deploy.sh 进入deploy.sh后, 在底部模式下(shift + :), 执行 :set fileformat=unix 后执行 :x 或者 :wq 保存修改。 然后就可以执行 ./a.sh 运行脚本
shell 文件
deploy.sh
#! /bin/bash
JAR_FILE=$1
PACKAGE_PATH=/home/package
PROJECT_PROFILE=prd
LOG_PATH=$3
export JAVA_HOME=$JAVA_HOME
echo -e "\n\033[46;30m ========== 欢迎使用本脚本部署应用 version 1.0 created by Jerry.Song ========= \033[0m\n"
if [[ -f $JAR_FILE ]]; then
echo "已经找到文件 $JAR_FILE,任务即将开始..."
TEMP_PATH=`pwd`
echo -e "当前所在文件夹: \033[1;34m $TEMP_PATH \033[0m"
else
echo "当前目录下没有jar文件,请检查!"
exit 1
fi
if [[ -z $TEMP_PATH ]]; then
echo "当前目录读取错误,程序即将停止运行"
exit 1
fi
PID=$(ps -ef | grep -w ${JAR_FILE} | grep -w java | grep -v grep | awk '{print $2}')
if [[ -z ${PID} ]]; then
echo "没有旧的jar文件在运行,等待部署流程启动...";
else
echo -e "开始杀死旧jar文件进程,进程id为:\033[1;34m $PID \033[0m";
kill -9 ${PID};
fi
if [[ ! -d $PACKAGE_PATH ]]; then
mkdir -p $PACKAGE_PATH
cd $PACKAGE_PATH
else
cd $PACKAGE_PATH
if [[ -f $JAR_FILE ]];then
mv ${JAR_FILE} "${JAR_FILE/.*/}_`date +%Y%m%d%H%M%S`.jar"
fi
fi
cp $TEMP_PATH/$JAR_FILE ./$JAR_FILE
if [[ ! -z $2 ]]; then
PROJECT_PROFILE=$2
fi
if [[ -z $LOG_PATH ]]; then
LOG_PATH=~/logs
fi
echo -e "当前日志目录指向 ====> \033[1;34m $LOG_PATH \033[0m"
if [[ ! -d $LOG_PATH ]]; then
mkdir -p $LOG_PATH
fi
echo -e "\n请稍等片刻,程序即将被部署,当前运行环境配置为: \033[1;34m $PROJECT_PROFILE \033[0m"
nohup java -server -Xms128M -Xmx512M -jar $JAR_FILE --spring.profiles.active=$PROJECT_PROFILE >> $LOG_PATH/${JAR_FILE%.*}.log 2>&1 &
if [[ $? = 0 ]]; then
echo -e "\n\033[5;31m ===================== 成功运行项目,请等待5秒加载系统日志 ==================== \033[0m\n"
sleep 5
tail -f ${LOG_PATH}/${JAR_FILE%.*}.log
fi
参考: