美文网首页
Java项目常用的发布shell命令

Java项目常用的发布shell命令

作者: 天草二十六_简村人 | 来源:发表于2021-11-17 16:01 被阅读0次

    一、目录结构

    》bin
    -- health.sh
    -- run.sh
    -- hosts
    -- startup.sh
    》dump
    》logs
    -- *.log
    》packages
    -- *.jar
    文件pid(进程号)

    二、设计

    重启: ./bin/startup.sh restart
    启动: ./bin/startup.sh start
    停止: ./bin/startup.sh stop

    image.png
    • bin目录下,有时候会需要一个hosts文件,用于汇总应用程序需要发布的节点列表。


      bin下的文件列表.png
    hosts.png
    • dump 目录,主要是存放java在内存溢出的时候,保存当时的内存快照。

    • packages目录,存放jar包

    • logs目录,保存日志文件

    三、详细实现

    1、health.sh

    ip=192.168.xx.xx
    port=80
    msg=$(curl -s -X GET "http://${ip}:${port}/health")
    up=$(echo $msg | grep \"UP\")
    down=$(echo $msg | grep \"DOWN\")
    if [ -n "$up" -a "$down" = '' ]; then
      echo "UP"
    else
      echo "DOWN"
    fi
    

    2、run.sh

    ip=$1
    cmd=$2
    service=order-service
    LOCAL_IP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
    
    # 本地执行
    if [ "$ip" = "$LOCAL_IP" ]; then
       /opt/xxx/${service}/bin/startup.sh $cmd
    else
    # ssh远程执行
       ssh root@${ip} "/opt/xxx/${service}/bin/startup.sh $cmd"
    fi
    

    3、startup.sh

    source /etc/profile
    today=`date +%Y%m%d`
    LOCAL_IP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
    
    service=order-service
    basepath=/opt/xxx/${service}
    
    start() {
       nohup java -Dserver.ip=${LOCAL_IP} -Xms64m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${basepath}/dump/ -jar ${basepath}/packages/${service}.jar >> ${basepath}/logs/${service}-$today.log 2>&1 &
    
      # 把进程号写入pid文件里   
       echo $! > ${basepath}/pid
    }
    
    stop() {
        kill -9 `cat $basepath/pid`
        rm -rf $basepath/pid
    }
    
    case "$1" in
      start)
        start
        ;;
      stop)
        stop
        ;;
      restart)
        stop
        sleep 1
        start
        ;;
      health)
        $basepath/bin/health.sh
        ;;
      *)
        echo "Usage: run.sh {start|stop|restart}"
        ;;
    esac
    
    exit 0
    

    相关文章

      网友评论

          本文标题:Java项目常用的发布shell命令

          本文链接:https://www.haomeiwen.com/subject/cpiltrtx.html