无忧启动论坛
标题:
linux下优雅启动停止java jar格式项目的脚本
[打印本页]
作者:
ldg_2
时间:
2024-8-1 09:29
标题:
linux下优雅启动停止java jar格式项目的脚本
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 应用程序也会继续运行。
停止的话需要
ps -ef | grep 进程名
复制代码
取得进程号,然后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保存退出就可以了
说明:之前网上有人发表过,现在找不到出处和作者了,这里贴出来,给有需要的坛友。
作者:
yyz2191958
时间:
2024-8-1 09:36
谢谢分享
作者:
wn168cn@163.com
时间:
2024-8-1 10:04
谢谢分享
作者:
zqfeng01
时间:
2024-8-1 10:08
谢谢分享
作者:
zqfeng01
时间:
2024-8-1 10:08
谢谢分享
作者:
13325531750
时间:
2024-8-1 10:45
感谢分享!
作者:
louther
时间:
2024-8-1 11:01
感谢分享!
作者:
xiaoxinTAT
时间:
2024-8-1 11:24
感谢分享!!
作者:
yyz2191958
时间:
2024-8-1 11:59
进来学习
作者:
towlzj800801
时间:
2024-8-1 12:13
多谢楼主分享!
作者:
ootd123
时间:
2024-8-1 13:04
谢谢分享
作者:
guong
时间:
2024-8-1 13:30
感谢分享!
作者:
yc2428
时间:
2024-8-1 14:21
谢谢分享...
作者:
737708260
时间:
2024-8-1 16:13
感谢分享!学习中》》》》》
作者:
wang1126
时间:
2024-8-1 17:25
谢谢分享
作者:
dshit
时间:
2024-8-1 17:28
属实优雅。一般我结束进程 先ps 找到程序,在kill 就好了。
作者:
2012fengxi
时间:
2024-8-1 22:58
感谢分享!
作者:
towlzj800801
时间:
2024-8-1 23:53
多谢楼主分享!
作者:
cqh
时间:
前天 07:49
学习
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/)
Powered by Discuz! X3.3