Linux下Jar指定配置文件运行脚本 sh(含screen版)

运行jar包

优化方法一:
java -jar xxx.jar &
& 表示后台运行,ssh窗口不被锁定,但是关闭窗口时,程序还是会退出

优化方法二:
nohup java -jar xxx.jar &
nohup 表示不挂断运行命令行,当账号退出或关闭终端时,程序仍然运行
当用 nohup 命令执行作业时,该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

优化方法三:
nohup java -jar xxx.jar >/usr/local/temp.txt &
 > /usr/local/temp.txt 表示将所有启动的日志信息记录到temp.txt文件中

sh脚本

在这里插入图片描述

#!/bin/sh
#jar的路径和名称
JAVA_NAME=publish.jar
#脚本目录
SH_DIR=$(cd $(dirname $0);pwd)
#脚本目录的上层目录
DEPLOY_DIR=$(dirname $SH_DIR)
#配置文件目录
CONF_DIR=$DEPLOY_DIR/config
#nohup 运行日志目录
LOG_DIR=$DEPLOY_DIR/log

echo "------ 脚本目录 $SH_DIR ------"
echo "------ 上层目录 $DEPLOY_DIR ------"
echo "------ LOG目录 $LOG_DIR ------"

#是否存在LOG_DIR 并创建
if [ ! -d $LOG_DIR ]; then
    echo "--->目录不存在 创建"
    mkdir $LOG_DIR
fi

#找出该程序是否在运行
PID=`ps -ef | grep $JAVA_NAME | grep -v "grep" | awk '{print $2}'`

#循环杀掉
for id in $PID
do
    kill -9 $id  
    echo "program is running on $id and killed "  
done

#指定spring 配置文件
CONFIG_FILES="-Dspring.config.location=$CONF_DIR/application.yml"
#指定nohup文件
NOHUP_FILE="$LOG_DIR/runing_log.txt"
#指定jar包位置
JAR_FILE="$DEPLOY_DIR/$JAVA_NAME"

#运行jar包
nohup java -jar $CONFIG_FILES $JAR_FILE > $NOHUP_FILE 2>&1 &

PID_RUN=`ps -ef | grep $JAVA_NAME | grep -v "grep" | awk '{print $2}'`
echo "program is running on PID:$PID_RUN... press enter!"

screen 运行脚本

SERVER_NAME="demo"
JAVA_NAME=publish.jar
#脚本目录
SH_DIR=$(cd $(dirname $0);pwd)
#脚本目录的上层目录
DEPLOY_DIR=$(dirname $SH_DIR)
#配置文件目录
CONF_DIR=$DEPLOY_DIR/config

#新建一个screen
screen -dmS $SERVER_NAME
CONFIG_FILES="-Dspring.config.location=$CONF_DIR/application.yml"
#运行脚本在 SERVER_NAME screen
screen -x -S $SERVER_NAME -p 0 -X stuff "java -jar $CONFIG_FILES $DEPLOY_DIR/$JAVA_NAME \n"
echo "config dir $CONF_DIR"
echo "starting completed!"
#!/bin/sh
SERVER_NAME="stkanalysis"
JAVA_NAME="stkanalysis-0.0.1-SNAPSHOT.jar"
SH_DIR=$(cd $(dirname $0);pwd)
DEPLOY_DIR=$(dirname $SH_DIR)
LOG_DIR=$DEPLOY_DIR/log
CONFIG_FILES="-Dspring.config.location=$DEPLOY_DIR/config/application.yml"
if [ ! -d $LOG_DIR ]; then
    mkdir $LOG_DIR
fi

stop(){
    
    
    pid=`ps -ef | grep $JAVA_NAME | grep -v "grep" | awk '{print $2}'`
    for id in $pid
    do
        kill -9 $id
        echo "$SERVER_NAME program is running on $id and killed"
    done
}

start(){
    
    
    stop
    nohup java -jar $CONFIG_FILES $DEPLOY_DIR/$JAVA_NAME > $LOG_DIR/runing_log.txt &
    echo "$SERVER_NAME program is running... press enter!"
}

stop_screen(){
    
    
    spid=`screen -ls |grep stkcore`
    for id in $spid
    do
        array=(${id//./ })
        # echo $id ${array[0]} ${array[1]}
        screen -X -S ${array[0]} quit
        echo "screen  $SERVER_NAME is running on ${array[0]} and killed"
    done
}

start_screen(){
    
    
    stop
    stop_screen
    screen -dmS $SERVER_NAME
    screen -x -S $SERVER_NAME -p 0 -X stuff "java -jar $CONFIG_FILES $DEPLOY_DIR/$JAVA_NAME \n"
    echo "starting $SERVER_NAME success!"
}

case $1 in
    "start") start
    ;;
    "stop") stop
    ;;
    "screen") start_screen
    ;;
esac

报错:/bin/sh^M:bad interpreter:

可能是sh脚本文件在windows下编辑过。
编辑脚本 vim **.sh
输入 :set ff ENTER,显示windows
更改 :set ff=UNIX ENTER
再次查看 :set ff ENTER ,显示UNIX

猜你喜欢

转载自blog.csdn.net/qq_33431394/article/details/107254785