|
linux下运行java的jar文件(尤其是springboot生成的一体化jar包)一般命令行为:
- nohup java -jar your-application.jar &
复制代码 这里的 your-application.jar 应该替换为您想要运行的 JAR 文件的实际文件名。
如果您还想要指定输出文件,可以使用 > 或 >> 将输出重定向到文件中,例如:
- nohup java -jar your-application.jar > output.log &
复制代码 这将会把标准输出重定向到 output.log 文件,并且即使您关闭终端或者注销用户,Java 应用程序也会继续运行。
停止的话需要
取得进程号,然后kill杀掉。程序员都是些很懒的家伙,所以就有了以下的脚本,用来把这种工作自动化,美其名曰优雅。
- #!/bin/bash
- cd `dirname $0`
- CUR_SHELL_DIR=`pwd`
- CUR_SHELL_NAME=`basename ${BASH_SOURCE}`
- #修改这里jar包名即可 demo-0.0.1-SNAPSHOT.jar
- #JAR_NAME="xxxxxxxxxxxx.jar"
- JAR_NAME="ty-listen-0.0.1-SNAPSHOT.jar"
- JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME
- #JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
- JAVA_MEM_OPTS=""
- #SPRING_PROFILES_ACTIV="-Dspring.profiles.active=eureka2"
- 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
复制代码 代码有注释,就不详细描述,熟悉shell脚本或者java程序员看看试试就明白了。
当然你还可以进一步修改,更符合你的使用习惯。
可能碰到的问题:如果是在windows下编辑,上传到linux下运行脚本,可能会报错:
- [root@localhost test]# ./test.sh
- -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory
复制代码 原因是sh脚本文件的格式在windows和linux下不同,解决办法:
用vi打开脚本文件,在vi命令模式中使用 :set ff 命令
- 命令::set ff=unix
- 或者::set fileformat=unix
复制代码 :wq保存退出就可以了
说明:之前网上有人发表过,现在找不到出处和作者了,这里贴出来,给有需要的坛友。
|
评分
-
查看全部评分
|