shell脚本实现编译/打包/部署/监控/拉起服务

java项目在tomcat上编译部署打包运行

#!/bin/sh
# build target file
JAVA_PROCESS=webMgr.war
TARGET_FILE="target/$JAVA_PROCESS"
cd /data/cicd/wms/webMgr
echo "rm $TARGET_FILE -f"
rm $TARGET_FILE -f
echo "mvn install"
mvn install
if [ ! -f $TARGET_FILE ]
then
  echo "build wms-web-mgr failed"
  exit 1
fi
# backup file
RUN_PATH=/opt/app/apache-tomcat-8.5.66
RUN_PACKAGE=${RUN_PATH}/webapps/ROOT/$JAVA_PROCESS
if [ -f $RUN_PACKAGE ]
then
  #获取文件做后修改时间戳
  LAST_MODIFY_TIMESTAMP=`stat -c %Y  $RUN_PACKAGE`
  #格式化时间戳
  FORMAT_DATE=`date '+%Y%m%d%H%M%S' -d @$LAST_MODIFY_TIMESTAMP`
  echo "$FORMAT_DATE"
  BACKUP_FILE=${RUN_PACKAGE}.${FORMAT_DATE}
  echo "mv $RUN_PACKAGE $BACKUP_FILE -f"
  mv $RUN_PACKAGE $BACKUP_FILE -f
fi
# update file
CURRENT_TS=`date "+%Y%m%d"`
DEST_FILE=${RUN_PACKAGE}.${CURRENT_TS}
echo "cp $TARGET_FILE $DEST_FILE -f"
cp $TARGET_FILE $DEST_FILE -f
echo "cp $DEST_FILE $RUN_PACKAGE -f"
cp $DEST_FILE $RUN_PACKAGE -f

# kill and run
cd ${RUN_PATH}/bin
/opt/app/tomcat/apache-tomcat-8.5.66/bin/shutdown.sh
/opt/app/tomcat/apache-tomcat-8.5.66/bin/startup.sh

springBoot项目打包部署运行

#!/bin/sh
# build target file
JAVA_PROCESS=cicc-web-b.jar
TARGET_FILE="target/$JAVA_PROCESS"
cd /data/cicd/official-web-b
echo "rm $TARGET_FILE -f"
rm $TARGET_FILE -f
echo "mvn install"
mvn install
if [ ! -f $TARGET_FILE ]
then
  echo "build official-web-b failed"
  exit 1
fi
# backup file
RUN_PACKAGE=/app/ciccwm-b/cicc-web-b.jar
if [ -f $RUN_PACKAGE ]
then
  #获取文件做后修改时间戳
  LAST_MODIFY_TIMESTAMP=`stat -c %Y  $RUN_PACKAGE`
  #格式化时间戳
  FORMAT_DATE=`date '+%Y%m%d%H%M%S' -d @$LAST_MODIFY_TIMESTAMP`
  echo "$FORMAT_DATE"
  BACKUP_FILE=${RUN_PACKAGE}.${FORMAT_DATE}
  echo "mv $RUN_PACKAGE $BACKUP_FILE -f"
  mv $RUN_PACKAGE $BACKUP_FILE -f
fi
# update file
CURRENT_TS=`date "+%Y%m%d"`
DEST_FILE=${RUN_PACKAGE}.${CURRENT_TS}
echo "cp $TARGET_FILE $DEST_FILE -f"
cp $TARGET_FILE $DEST_FILE -f
echo "cp $DEST_FILE $RUN_PACKAGE -f"
cp $DEST_FILE $RUN_PACKAGE -f

# kill and run
ps -ef | grep $JAVA_PROCESS | grep -v "grep" | awk '{print $2}' | xargs kill -9
nohup java -jar $RUN_PACKAGE >/app/ciccwm-b/logs/nohup.log 2>&1 &

前端页面项目打包部署

#!/bin/sh
# build target file
JAVA_PROCESS=ciccwmweb
TARGET_FILE="ciccwm-web/$JAVA_PROCESS"
cd /data/cicd/official-web-f/cicc_web
echo "rm $TARGET_FILE -rf"
rm $TARGET_FILE -rf
echo "npm run build"
npm run build
if [ ! -d $TARGET_FILE ]
then
  echo "build official-web-f failed"
  exit 1
fi
# backup file
RUN_PACKAGE=/app/data/ciccwm-web/ciccwmweb
if [ -d $RUN_PACKAGE ]
then
  #获取文件做后修改时间戳
  LAST_MODIFY_TIMESTAMP=`stat -c %Y  $RUN_PACKAGE`
  #格式化时间戳
  FORMAT_DATE=`date '+%Y%m%d%H%M%S' -d @$LAST_MODIFY_TIMESTAMP`
  echo "$FORMAT_DATE"
  BACKUP_FILE=${RUN_PACKAGE}.${FORMAT_DATE}
  echo "mv $RUN_PACKAGE $BACKUP_FILE -f"
  mv $RUN_PACKAGE $BACKUP_FILE -f
fi
# update file
CURRENT_TS=`date "+%Y%m%d"`
DEST_FILE=${RUN_PACKAGE}.${CURRENT_TS}
echo "cp $TARGET_FILE $DEST_FILE -rf"
cp $TARGET_FILE $DEST_FILE -rf
echo "cp $DEST_FILE $RUN_PACKAGE -rf"
cp $DEST_FILE $RUN_PACKAGE -rf

# kill and run
/usr/local/nginx/sbin/nginx -s reload

crontab计划任务监控相关进程并拉起

#!/bin/sh

ps axu |grep 'nginx' |grep -v 'grep' &>/dev/null
if [ $? -ne 0 ]
then
    echo "准备重启nginx"
    /usr/local/nginx/sbin/nginx
    if [ $? -eq 0 ]
        then echo "nginx启动成功!"
    fi
else
    echo "nginx正在运行中"
fi

ps axu |grep '/app/ciccwm-b/cicc-web-b.jar' |grep -v 'grep' &>/dev/null
if [ $? -ne 0 ]
then
    echo "准备重启/app/ciccwm-b/cicc-web-b.jar"
    nohup java -jar /app/ciccwm-b/cicc-web-b.jar >/app/ciccwm-b/logs/nohup.log 2>&1 &
    if [ $? -eq 0 ]
        then echo "/app/ciccwm-b/cicc-web-b.jar启动成功!"
    fi
else
    echo "/app/ciccwm-b/cicc-web-b.jar正在运行中"
fi

ps axu |grep '/app/tomcat/apache-tomcat-8.5.66' |grep -v 'grep' &>/dev/null
if [ $? -ne 0 ]
then
    echo "准备重启/app/tomcat/apache-tomcat-8.5.66"
    /app/tomcat/apache-tomcat-8.5.66/bin/startup.sh
    if [ $? -eq 0 ]
        then echo "/app/tomcat/apache-tomcat-8.5.66启动成功!"
    fi
else
    echo "/app/tomcat/apache-tomcat-8.5.66正在运行中"
fi

ps axu |grep '/app/webmgr/apache-tomcat-8.5.66' |grep -v 'grep' &>/dev/null
if [ $? -ne 0 ]
then
    echo "准备重启/app/webmgr/apache-tomcat-8.5.66"
    /app/webmgr/apache-tomcat-8.5.66/bin/startup.sh
    if [ $? -eq 0 ]
        then echo "/app/webmgr/apache-tomcat-8.5.66启动成功!"
    fi
else
    echo "/app/webmgr/apache-tomcat-8.5.66正在运行中"
fi

改进监测进程和拉起

nohup命令:菜鸟教程

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

2>&1 解释:将标准错误2 重定向到标准输出&1,标准输出&1 再被重定向输入到 runoob.log 文件中。

0 – stdin  (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)

监测java -jar和拉起

#!/bin/sh
RUN_PATH=/app/ciccwm-b/cicc-web-b.jar
MONITOR_PROCESS=`ps axu |grep "${RUN_PATH}" |grep -v 'grep'|wc -l`
RUN_MODE=`nohup java -jar ${RUN_PATH} >/app/ciccwm-b/logs/nohup.log 2>&1 &`

if [ $MONITOR_PROCESS -eq 0 ]
then
    echo "准备重启$RUN_PATH"
    echo $RUN_MODE
    if [ $? -eq 0 ]
        then echo "${RUN_PATH}启动成功!"
    fi
else
    echo "${RUN_PATH}正在运行中"
fi

监测tomcat和拉起

#!/bin/sh
RUN_PATH=/app/tomcat/apache-tomcat-8.5.66
MONITOR_PROCESS=`ps axu |grep "${RUN_PATH}" |grep -v 'grep' |wc -l`
RUN_MODE=${RUN_PATH}/bin/startup.sh

if [ $MONITOR_PROCESS -eq 0 ]
then
    echo "准备重启${RUN_PATH}"
    $RUN_MODE
    if [ $? -eq 0 ]
        then echo "${RUN_PATH}启动成功!"
    fi
else
    echo "${RUN_PATH}正在运行中"
fi

检测nginx和拉起

#!/bin/sh
RUN_MODE=/usr/local/nginx/sbin/nginx
MONITOR_PROCESS=`ps axu |grep "${RUN_MODE}"|grep -v 'grep'|wc -l`

if [ $MONITOR_PROCESS -eq 0 ]
then
    echo "准备重启nginx"
    $RUN_MODE
    if [ $? -eq 0 ]
        then echo "nginx启动成功!"
    fi
else
    echo "nginx正在运行中"
fi

Shell 脚本中调用另一个 Shell 脚本的三种方式

参考博客:SHELL【1】-在 Shell 脚本中调用另一个 Shell 脚本的三种方式

fork

直接在脚本里写另一个要调用脚本的执行路径
#!/bin/bash

RUN_PATH2=/data/app/prod-monitor

echo  "开始调用monitor-webmgr"
    ${RUN_PATH2}/monitor-webmgr.sh

echo  "开始调用monitor-nginx开始"
    ${RUN_PATH2}/monitor-nginx.sh

echo  "开始调用monitor-officeb开始"
    ${RUN_PATH2}/monitor-officeb.sh

echo  "开始调用monitor-portal开始"
    ${RUN_PATH2}/monitor-portal.sh

在这里插入图片描述

exec

exec path/test.sh
#!/bin/bash

RUN_DIR=/data/app/prod-monitor

echo  "开始调用monitor-webmgr"
   exec ${RUN_DIR}/monitor-webmgr.sh

echo  "开始调用monitor-nginx开始"
   exec ${RUN_DIR}/monitor-nginx.sh

echo  "开始调用monitor-officeb开始"
   exec ${RUN_DIR}/monitor-officeb.sh

echo  "开始调用monitor-portal开始"
   exec ${RUN_DIR}/monitor-portal.sh

在这里插入图片描述

exec总结:
  exec调用脚本后,主脚本中exec后的内容就不会被执行了。
  这里我们要调用四个脚本呢,所以exec此时就合适了。

source

source patch/test.sh
#!/bin/bash

RUN_DIR=/data/app/prod-monitor

echo  "开始调用monitor-webmgr"
   source ${RUN_DIR}/monitor-webmgr.sh

echo  "开始调用monitor-nginx开始"
   source ${RUN_DIR}/monitor-nginx.sh

echo  "开始调用monitor-officeb开始"
   source ${RUN_DIR}/monitor-officeb.sh

echo  "开始调用monitor-portal开始"
   source ${RUN_DIR}/monitor-portal.sh

在这里插入图片描述

当将source调用方式问题总结:
      当“主脚本”里的变量和“被调用的脚本”里的变量重名时,
      主脚本变量先解析到的是被调用脚本里变量的值,
      所以此时“被调用脚本”中声明的变量在主脚本中可以调用。

出现以下这个问题是应为“主脚本”和“被调用脚本”里都有一个RUN_PATH变量。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值