运行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