shell常用命令(这篇主要用来启动项目)

例子:

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  deploy)
        deploy
        ;;
  depstart)
        depstart
        ;;
  restart)
        restart
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|deploy|depstart}"
        exit 2
esac

根据执行脚本后面带的参数,决定运行具体函数

函数写法:

#### 重启
restart() {
    stop
    sleep 4
    start
}

输出到日志

echo "Stopping $APP_NAME ........"

自定义变量,变量引用

flag=1
flag=`expr $flag + 1`  (变量自增)

While循环

while [ -f "$logs" ]
do
    echo  "Starting $APP_NAME ........"
        JAR_FILE=`cd $JAR_ZIP_DIR && ls -at $APP_NAME*.jar |head -n 1`
        nohup java $JAVA_OPTS -jar $JAR_ZIP_DIR/$JAR_FILE  --schedule.blackUser.openFlag=off   > "$logs" &
        sleep 4
        getTradeProtalPID
        if [ $tradePortalPID -ne 0 ]; then
            echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\)  ............."                    \033[32;49;1m [SUCCESS] \033[39;49;0m"
            break;
        else
            echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\)  ............."                     \033[31;49;1m [Failed] \033[39;49;0m"
            flag=`expr $flag + 1`
            if [[ "$flag" -gt  "$times"  ]]
            then
                   echo "limit times ...stop"
                   break;
            fi

        fi

done

解释:

  1. -f “$logs” logs是我自定义的路径日志 ,这句的意思是日志存在
  2. getTradeProtalPID 是我自定义的函数,作用是获取当前项目启动的进程号
####获取pid ###
tradePortalPID=0
getTradeProtalPID(){
    javaps=`ps -ef | grep $APP_NAME |grep java |grep -v grep`
    if [ -n "$javaps" ]; then
        tradePortalPID=`ps -ef | grep ${APP_NAME} |grep java|grep -v grep| awk '{print $2}'`
    else
        tradePortalPID=0
    fi

}

3.$tradePortalPID -ne 0 判断进程号是否为0(就是判断进程起来没)
4.\033[32;49;1m [SUCCESS] \033[39;49;0m 自定义输出内容颜色
5.-lt 小于 -gt 大于

读取其他配置文件进脚本

source /opt/jar/start.cfg

读取后可直接 $变量名 引用

完整脚本

#!/bin/bash
#-------------------------------------------------------------------------------------------------------------
#该脚本的使用方式为-->[sh startup.sh]
#该脚本可在服务器上的任意目录下执行,不会影响到日志的输出位置等
#-------------------------------------------------------------------------------------------------------------
#颜色设置
#SETCOLOR_SUCCESS="echo -en \\033[1;32m"
#SETCOLOR_FAILURE="echo -en \\033[1;31m"
#SETCOLOR_NORMAL="echo -en \\033[0;39m"

#设定环境变量
source /opt/jar/start.cfg

#APP_NAME=command-server
#JAR_ZIP_DIR=/opt/jars/command-server/
JAR_FILE=`cd $JAR_ZIP_DIR && ls -at $APP_NAME*.jar |head -n 1`

JAVA_OPTS="-server -Xmx520M -Xms520M   -Xmn400M -XX:MaxMetaspaceSize=520M -XX:MetaspaceSize=520M -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:+CMSScavengeBeforeRemark"

####获取pid ###
tradePortalPID=0
getTradeProtalPID(){
    javaps=`ps -ef | grep $APP_NAME |grep java |grep -v grep`
    if [ -n "$javaps" ]; then
        tradePortalPID=`ps -ef | grep ${APP_NAME} |grep java|grep -v grep| awk '{print $2}'`
    else
        tradePortalPID=0
    fi
    
}


#### 启动 ######

start() {
flag=1
getTradeProtalPID
if [ ${tradePortalPID} -ne 0 ];
    then
       echo "${APP_NAME} already started(PID=${tradePortalPID})"
fi

while [ -f "$logs" ]
do
    echo  "Starting $APP_NAME ........"
        JAR_FILE=`cd $JAR_ZIP_DIR && ls -at $APP_NAME*.jar |head -n 1`
        nohup java $JAVA_OPTS -jar $JAR_ZIP_DIR/$JAR_FILE  --schedule.blackUser.openFlag=off   > "$logs" &
        sleep 4
        getTradeProtalPID
        if [ $tradePortalPID -ne 0 ]; then
            echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\)  ............."                    \033[32;49;1m [SUCCESS] \033[39;49;0m"
            break;
        else
            echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\)  ............."                     \033[31;49;1m [Failed] \033[39;49;0m"
            flag=`expr $flag + 1`
            if [[ "$flag" -gt  "$times"  ]]
            then
                   echo "limit times ...stop"
                   break;
            fi

        fi

done

}


##### 关闭 ########
stop() {
#        echo "================================================================================================================"
        echo "Stopping $APP_NAME ........"
        getTradeProtalPID
        if [ $tradePortalPID -ne 0 ]; then
                kill -9 $tradePortalPID & getTradeProtalPID
                sleep 4
                echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\) ............."                    \033[32;49;1m [SUCCESS] \033[39;49;0m"

#               echo "================================================================================================================"
        else
                sleep 4
                echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\) ............."                     \033[31;49;1m [Failed] \033[39;49;0m"
#               echo "================================================================================================================"

        fi

}


##### 部署 ########
deploy() {
#       echo "================================================================================================================"
        echo "deploying $APP_NAME ........"
         /opt/apps/ossutil64 cp oss://mtk-deploy/data/ /opt/data/ --recursive --update
        /opt/apps/ossutil64 cp oss://mtk-deploy/config/ /opt/config/ --recursive  --update
        /opt/apps/ossutil64 cp oss://mtk-deploy/$APP_NAME/ /opt/jars/$APP_NAME/ --recursive  --update

}

#### 重启
restart() {
    stop
    sleep 4
    start
}

#### 部署并重启
depstart() {
    deploy
    stop
    sleep 8
    start
}


#### 选项
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  deploy)
        deploy
        ;;
  depstart)
        depstart
        ;;
  restart)
        restart
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|deploy|depstart}"
        exit 2
esac

配置文件start.cfg

#!/bin/bash
times=5
wait_time=25s
kewords="Started"
APP_NAME=springcloud-eureka-server
JAR_ZIP_DIR=/opt/jar/
logs=/opt/jar/start.log
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值