SpringCloud启动脚本详解,Linux中nohup与&详解

1 SpringCloud脚本详解

1.1 脚本案例

#!/bin/bash
cd `dirname $0` 
CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`
#此处的项目名字 即 maven打包后包名: springcloud-eureka-server-0.0.1-SNAPSHOT.jar
JAR_NAME="项目名称"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME 
#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS="" 
# 要激活的哪个服务:eureka,eureka2等之类的
SPRING_PROFILES_ACTIV="-Dspring.profiles.active=配置文件变量名称"
#SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME%.*}.log 
echo_help(){
    echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}
 
if [ -z $1 ];then
    echo_help
    exit 1
fi
 
if [ ! -d "$LOG_DIR" ];then
    mkdir "$LOG_DIR"
fi
 
if [ ! -f "$LOG_PATH" ];then
    touch "$LOG_DIR"
fi
 
 if [ "$1" == "start" ];then
     # check server
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -n "$PIDS" ]; then
        echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
        exit 1
    fi
     echo "Starting the $JAR_NAME..."
 
    # start
    nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
        if [ $COUNT -gt 0 ]; then
            break
        fi
    done
    PIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
    echo "${JAR_NAME} Started and the PID is ${PIDS}."
    echo "You can check the log file in ${LOG_PATH} for details."
 
elif [ "$1" == "stop" ];then
 
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -z "$PIDS" ]; then
        echo "ERROR:The $JAR_NAME does not started!"
        exit 1
    fi
 
    echo -e "Stopping the $JAR_NAME..."
 
    for PID in $PIDS; do
        kill $PID > /dev/null 2>&1
    done
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=1
        for PID in $PIDS ; do
            PID_EXIST=`ps --no-heading -p $PID`
            if [ -n "$PID_EXIST" ]; then
                COUNT=0
                break
            fi
        done
    done
 
    echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
else
    echo_help
    exit 1
fi

1.2 脚本讲解

1.2.1 dirname $0

dirname $0 这个命令写在脚本文件里才有作用,它返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)

1.2.2 basename

basename:文件名

1.2.3 ${JAR_NAME%.*}.log

点击查看linux特殊符号作用的博客

1.2.4 ps --no-heading行处语法

ps这是报告程序状况的命令语法

  • --no-heading此参数的效果和指定"h"参数相同(不显示标题列),只在列表格式方面稍有差异
  • -C java指定执行指令的名称,并列出该指令的程序的状况,此处相当于过滤出java信息
  • -f显示UID,PPIP,C与STIME栏位
  • --width 1000设置每列的最大字符数
  • awk '{print $2}'
    $2:表示第二个字段
    print $2 : 打印第二个字段
    awk '{print $2}' $fileName : 一行一行的读取指定的文件, 以空格作为分隔符,打印第二个字段
    比如有这样一个文件
a1  b1  c1  d1
a2  b2  c2  d2

执行的结果是,输出

b1
b2

1.2.5 nohup处语法

1.2.5.1nohup知识理解

nohup命令运行由Command参数和任何相关的Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。
在注销后使用nohup命令运行后台中的程序。要运行后台中的nohup命令,添加 & ( 表示and的符号)到命令尾部
nohupno hang up 的缩写,就是不挂断的意思。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。

1.2.5.2 nohup案例

1.2.5.2.1案例一
nohup command > myout.file 2>&1 &   

在上面的例子中:

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

command >out.file是将command的输出重定向到myout.file文件,即输出内容不打印到屏幕上,2>&1是将标准错误(2)重定向到标准输出(&1),但是这里的标准输出已经重定向到了myout.file文件,因此将标准出错也输出到myout.file文件中,最后一个& , 是让该命令在后台执行

1.2.5.2.2 案例二
> /dev/null 2>&1

/dev/null 可以看作黑洞. 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
/dev/null 2>&1则表示把标准输出错误输出都放到这个“黑洞”,表示什么也不输出

1.2.5.3 nohup和&的区别

  • &: 指在后台运行,但当用户退出(挂起)的时候,命令自动也跟着退出
  • nohup不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响它的运行,注意了nohup没有后台运行的意思;&才是后台运行

1.3 脚本报错

1.3.1 启动报错

linux启动脚本时报错:-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory
原因是文件的格式是dos,修改为unixOK
具体操作步骤:

  1. 查看文件格式 用vim 打开出错的文件 按 ESC键 再按shift + : 输入 set ff 回车 可以看见 该文件的格式fileformat=dos
  2. shift + : 输入 set ff=unix 回车 发现没反应,那就对了。
  3. 可以按 shift + : 到行低,set ff 查看 fileformat=unix
发布了334 篇原创文章 · 获赞 186 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/104317873