#!/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】"
评论已关闭。