启动最新的jar 06_startup.sh

2019年12月12日 作者 刘剑
#!/usr/bin/env bash

## 1. 获取本机ip地址
echo "获取服务器IP"
#local_ip=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6 | awk '{print $2}' | tr -d "addr:"`
local_ip=`ip addr |grep inet|grep -v 127.0.0.1|grep -v inet6 | awk '{print $2}' | awk -F "/" '{print $1}'`

echo "----获取的ip地址列表:$local_ip"

targetIp=""
for element in $local_ip
do
    echo "----当前ip:$element"
    if [[ $element =~ "172.17" ]]
    then
      echo "----包含,这是docker的ip"
    else
      echo "----不包含,这就是要找的IP,哈哈哈"
      targetIp=$element
    fi
done

echo "----【本机Ip为:$targetIp】"


## 2. 复制logback文件,适应同一服务多机器部署
echo "复制logback文件并修改日志文件名称"
logbackFile="logback-$targetIp.xml"
cp conf/logback-prod.xml conf/$logbackFile
sed -i 's/.log</-'$targetIp'.log</g' `grep "<file>" -rl --include="$logbackFile" */`
echo "----【logback文件名称:$logbackFile】 日志文件添加IP:$targetIp"

## 3. 遍历所有jar文件,获取最新的jar供启动用
echo "获取待执行的jar包"
targetFiles=`ls -lt | grep -E '\.jar' | head -n 2 | awk '{print $9}'`
echo "----jar包名称:$targetFiles"

i=0
for targetFile in $targetFiles
do
    #echo "i=$i"
    if [[ $i == 0 ]];then
        lastestFile=$targetFile
    else
        ## 这里有bug,如果是两个目录切换,这里就不适用了
        runingFile=$targetFile
    fi
    i=`expr $i + 1`
done

echo "----【准备最新jar包:$lastestFile】"
# echo "----【正在运行jar包:$runingFile】"

## 直接从目录中获取程序名称,用来停止程序
dir=$PWD
runingFile=${dir##*/}
echo "----【正在运行jar包:$runingFile】"

## 4. 杀掉进程,启动服务
echo "停止服务器"
preStopProcess=`ps -ef |grep "$runingFile.*.jar" |grep -v grep |cut -c 9-15`

if [ -z "$preStopProcess" ];then
    echo "----warning: $runingFile没有运行"
else
    kill -9 $preStopProcess
    echo "----已杀死进程:$preStopProcess"
fi


echo "启动服务器:$runingFile"
## 先source一下,不然会找不到环境变量java
source /etc/profile
if [[ "$runingFile" == "eship-label-ex" ]];then
    db=$1
    if [[ "$db" == "h2" ]];then
        echo "----使用H2内嵌数据库启动,并且不启动xxl-job"
        ## 如果是外网的label-ex使用下面的启动:1.使用内嵌的H2数据库;2.不启动xxl-job
        nohup java -jar -Dspring.profiles.active=prod -Dlogging.config=classpath:$logbackFile -Ddubbo.protocol.host=$targetIp -Dxxl.job.executor.ip=$targetIp -Dspring.h2.console.enabled=true -Dspring.datasource.url=jdbc:h2:mem:cib -Dspring.datasource.username=root -Dspring.datasource.password=root -Dspring.datasource.driver-class-name=org.h2.Driver -Dspring.jpa.database-platform=org.hibernate.dialect.H2Dialect -Dxxl.job.disabled=true  $lastestFile  >/dev/null 2>&1 &
    else
        nohup java -jar -Dspring.profiles.active=prod -Dlogging.config=classpath:$logbackFile -Ddubbo.protocol.host=$targetIp -Dxxl.job.executor.ip=$targetIp $lastestFile  >/dev/null 2>&1 &
    fi
else
    nohup java -jar -Dspring.profiles.active=prod -Dlogging.config=classpath:$logbackFile -Ddubbo.protocol.host=$targetIp -Dxxl.job.executor.ip=$targetIp $lastestFile  >/dev/null 2>&1 &
fi

sleep 2s

newProcess=`ps -ef |grep $lastestFile |grep -v grep |cut -c 9-15`
echo "----【已启动进程:$newProcess】"