#!/bin/bash
# 脚本中只要出现执行不是true的语句,就退出不再往下执行
set -e
# 导入环境变量
export jar_PATH=/data/web
export APP_PATH=/home/
# 判断老的进程是否存在,若存在就杀掉
killjar()
{
pid=`ps -ef|grep supplier-center |grep java |awk '{print $2}'`
echo "supplier-center Id list :$pid"
if [ "$pid" = "" ]
then
echo "no supplier-center pid alive"
else
kill -9 $pid
fi
}
# 调用函数
killjar
# 判断老的jar包是否存在,若存在就删除
[ -f $APP_PATH/supplier-center-1.0.0-SNAPSHOT.jar ] &&
rm -rf $APP_PATH/supplier-center-1.0.0-SNAPSHOT.jar
# 更新最新的jar包
mv $jar_PATH/supplier-center-1.0.0-SNAPSHOT.jar $APP_PATH
# 重新启动
nohup java -jar $APP_PATH/supplier-center-1.0.0-SNAPSHOT.jar >
$APP_PATH/admin.log &
# sleep 10秒, 等待java进程完成起来
sleep 10s
echo 'Start success!'
sh -x supplier-center.sh #检查脚本是否有问题
#!/bin/bash
cd ${WORKSPACE}/supplier-center/target
scp supplier-center-1.0.0-SNAPSHOT.jar 192.168.0.29:/data/web
ssh 192.168.0.29 "bash /data/sh/supplier-center.sh"
判断都有if语句,否则jenkins会执行不了,还有一个巨坑
#!/bin/bash # 脚本中只要出现执行不是true的语句,就退出不再往下执行 set -e # 导入环境变量 export jar_PATH=/data/web export APP_PATH=/opt # 判断老的jar包是否存在,若存在就删除 if [ -f $APP_PATH/antSale ]; then rm -rf $APP_PATH/antSale fi #echo $? #echo "###end###" # 更新最新的jar包 if [ -f $jar_PATH/antSale ]; then mv $jar_PATH/antSale $APP_PATH fi #echo $?
jar包引用本地同级配置文件config,解决每次合并分支更改配置文件问题,相对路径可以加个config自动识别配置文件
nohup java -jar -Dspring.config.location=/绝对路径/application.properties /xxx/xxx.jar > /xxx/xxx.log &
#!/bin/bash
# 脚本中只要出现执行不是true的语句,就退出不再往下执行
set -e
# 导入环境变量
export jar_PATH=/data/web
export APP_PATH=/home
# 判断老的进程是否存在,若存在就杀掉
killjar()
{
pid=`ps -ef|grep supplier-center |grep java |awk '{print $2}'`
echo "supplier-center Id list :$pid"
if [ "$pid" = "" ]
then
echo "no supplier-center pid alive"
else
kill -9 $pid
fi
}
# 调用函数
killjar
# 判断老的jar包是否存在,若存在就删除
if [ -f $APP_PATH/supplier-center/supplier-center-1.0.0-SNAPSHOT.jar ]; then
rm -rf $APP_PATH/supplier-center/supplier-center-1.0.0-SNAPSHOT.jar
fi
# 更新最新的jar包
if [ -f $jar_PATH/supplier-center-1.0.0-SNAPSHOT.jar ]; then
mv $jar_PATH/supplier-center-1.0.0-SNAPSHOT.jar $APP_PATH/supplier-center
fi
# 重新启动
#cd $APP_PATH/supplier-center &&
#nohup java -jar /home/supplier-center/supplier-center-1.0.0-SNAPSHOT.jar > supplier-center.log &
nohup java -jar -Dspring.config.location=/home/supplier-center/config/application.yml /home/supplier-center/supplier-center-1.0.0-SNAPSHOT.jar > supplier-center.log &
# sleep 10秒, 等待java进程完成起来
sleep 10s
echo 'Start success!'
远程(jenkins)调用shell 不能正常结束
例如:nohup java -jar start.jar >log.log 2>&1 &。
但是在jenkins远程调用,会把日志打印在jenkins控制台中,导致任务不能结束。
通过排查,在程序运行前使用了cd命令,先cd到目录,在运行命令
cd /service && nohup java -jar start.jar >log.log 2>&1 &
改为绝对路径,去掉cd命令,程序正常了
脚本如下:
#!/bin/bash
set -x
kill -9 `ps -ef |grep start|grep -v grep|awk -F " " '{print$2}'`
source /etc/profile
nohup java -jar /service/start.jar -Xms500m -Xmx500m -Xmn250m -Xss256k -server -XX:+HeapDumponOutOfMemoryError > /service/Log.log 2>&1 &
echo "starting service..."
sleep 10
#根据重启后是否有当前应用判断启动是否成功
pid=$(ps -ef |grep start|grep -v grep|awk -F " " '{print$2}')
#echo $pid
if [ -z $pid ];then
echo "启动失败"
exit 1
else
echo $pid "SUCCESS"
fi



