#!/bin/bash
echo "First argument is: $1"
echo "Second argument is: $2"
#开始时间 时间戳
startTime=`date +'%Y-%m-%d %H:%M:%S'`
#接口项目站点路径(目录按照各自配置)
APP_PATH=/home/app/$1
#APP_PATH=/Library/WebServer/Documents/java/crm-admin/target
#jar包文件名称
APP_NAME=$APP_PATH/$1.jar
echo "appName: $APP_NAME"
#日志文件名称
LOG_FILE=$APP_PATH/$1.log
echo "LOG_FILE: $LOG_FILE"
#启动环境 # 如果需要配置数据和redis,请在 application-prod.yml中修改, 用jar命令修改即可
APP_YML=--spring.profiles.active=$2
echo "APP_YML: $APP_YML"
#APP_CONFIG=--spring.config.location=$APP_PATH/
#echo "APP_CONFIG: $APP_CONFIG"
#数据库配置
rm -rf $LOG_FILE
echo "开始停止 crm-admin 项目进程"
#查询进程,并杀掉当前jar/java程序
pid=`ps -ef|grep $APP_NAME | grep -v grep | awk '{print $2}'`
if [ $pid ];then
echo "pid: $pid"
kill -9 $pid
echo "crm-admin 项目进程进程终止成功"
fi
sleep 2
#判断jar包文件是否存在,如果存在启动jar包,并时时查看启动日志
if test -e $APP_NAME;then
echo '文件存在,开始启动此程序...'
# 启动jar包,指向日志文件,2>&1 & 表示打开或指向同一个日志文件 --spring.profiles.active=prod 启动 prod环境
nohup java -jar $APP_NAME $APP_YML > $LOG_FILE 2>&1 &
echo "正在发布中,请稍后......"
sleep 10s
#通过检测日志来判断
while [ -f $LOG_FILE ]
do
success=`grep "Tomcat started" $LOG_FILE`
if [[ "$success" != "" ]]
then
# echo "crm-admin start ........."
break
else
# echo "crm-admin Running ......."
sleep 1s
fi
# echo "开始检测启动失败标记"
fail=`grep "Fail" $LOG_FILE`
if [[ "$fail" != "" ]]
then
echo "项目启动失败"
tail -f $LOG_FILE
break
else
# echo "crm-admin Running ......."
sleep 1s
fi
done
echo "crm-admin Started Success"
endTime=`date +'%Y-%m-%d %H:%M:%S'`
startSecond=$(date --date="$startTime" +%s);
endSecond=$(date --date="$endTime" +%s);
total=$((endSecond-startSecond))
# shellcheck disable=SC2027
echo "本次运行时间: "$total"s"
# shellcheck disable=SC2086
echo "当前时间:"$endTime
else
echo '$APP_NAME 文件不存在,请检查。'
fi
#在 $APP_NAME 同级目录下运行 ./start.sh 命令即可启动项目。
start.sh(启动脚本)
crm-admin(你的项目名)
Jenkins
cd /home/app(你的脚本位置)
sh start.sh crm-admin dev
(dev是环境比如你的spring下面resources下面有application.yml,application-dev.yml,application-prod.yml)
我是java程序员,这个脚本拷贝过来,我感觉这个缺少了一些功能,后面找到了,我在完善一下,jar包备份,log备份,可以方便看日志和回滚等,这个脚本测试环境跑跑还行
这个stop.sh 和Jenkins无关,启动脚本里面有
#接口项目站点路径(目录按照各自配置)
APP_PATH=/www/wwwroot/crm-admin/
#jar包文件名称
APP_NAME=$APP_PATH/crm-admin.jar
echo "开始停止 crm-admin 项目进程"
#查询进程,并杀掉当前jar/java程序
pid=`ps -ef|grep $APP_NAME | grep -v grep | awk '{print $2}'`
echo "pid: $pid "
if [ $pid ];then
echo "pid: $pid"
kill -9 $pid
echo "crm-admin 项目进程进程终止成功"
else
echo "未找到对应服务"
fi