注意文件格式unix格式(Windows cr lf换行符有不可见字符)
#!/bin/sh
# 服务名(要与配置文件中的server名保持一致)
APP_NAME=""
# git本地仓库路径
GIT_RESPOSITORY=""
# 配置文件存储位置
PROFILE_LOCATION=""
# 配置文件名
PROFILE_NAME=""
# 日志文件存储位置
LOG_LOCATION=""
# maven打包文件名(jar包)
PROKAGE_NAME=""
# maven打包的相对路径(git仓库下的相对路径)
MAVEN_PROKAGE_LOCATION=""
clear
echo "+-------------------------------+"
echo "| 自动化部署xx项目后台服务脚本 |"
echo "+-------------------------------+"
#控制台输出日志
_log(){
echo [$(date +"%Y-%m-%d %H:%M:%S")] $@
}
#根据名称结束进程
_kill_program(){
app_name="$1"
tpid=`ps -ef|grep $app_name |grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
_log '停止进程中...'
kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $app_name |grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
_log '停止进程失败,强制结束进程!'
kill -9 $tpid
else
_log '项目已停止!'
fi
}
# 拉取代码并打包
_git_pull_and_maven_package(){
git_res="$1"
cd $git_res
_log 开始从Git仓库拉取最新代码
git pull
_log 代码拉取完成
_log 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
_log 打包结束
}
_main(){
_log "检查项目是否正在运行..."
# 结束原有进程
_kill_program ${APP_NAME}
# 拉取最新代码,并打包
/0_user/sh/common/git_pull_and_maven_package.sh ${GIT_RESPOSITORY}
# 进入打包后的文件位置
package=${GIT_RESPOSITORY}${MAVEN_PROKAGE_LOCATION}
# 将本机的application.yml应用到该项目中
cp ${PROFILE_LOCATION}/${PROFILE_NAME} $package
mv $package/${PROFILE_NAME} $package/application.yml
_log "后台启动项目"
# 将日志追加到指定文件
nohup java -jar $package/${PROKAGE_NAME} &>> ${LOG_LOCATION} &
sleep 2
tpid=`ps -ef|grep $APP_NAME |grep -v grep|grep -v kill|awk '{print $2}'`
_log "项目启动完成,进程id为:${tpid}"
}
_main
标签:脚本,grep,springboot,package,tpid,自动,NAME,kill,log
From: https://www.cnblogs.com/undercure/p/17684505.html