简介
我们在Linux服务器运行jar包时常常会因为命令行太复杂而忘记如何运行和停止,我们可以使用脚本的形式来启动、停止、重新启动应用程序,节省时间减少出错概率
步骤
通常我们在linux运行一个jar包或者war包的命令:
但是关掉连接工具后就会停止正在运行的应用,需要后台执行,可使用命令nohup:
1
| nohup java -jar xxx.jar > out.log 2>&1 &
|
但是这又会出现一个问题,我想重新部署的话必须关掉原来运行的,在linux中可执行以下命令寻找pid:
PS:使用以下命令可以去掉查询进程本身的信息:
1
| ps -ef | grep java | grep -v grep
|
只保留pid信息:
1
| ps -ef | grep java | grep -v grep | awk '{print $2}'
|
杀死进程:
重新运行:
1
| nohup java -jar xxx.jar > out.log 2>&1 &
|
总结来说运行一个应用程序的一般步骤:
运行 -> 停止 -> 运行
以上步骤复杂且有人工误操作的风险,所以我们可以制作一个脚本来一键运行或停止它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #!/bin/bash
APP_NAME=fivechess-1.0.jar
APP_PATH=target/$APP_NAME
LOG_FILE=fivechess.log
JVM_OPTS="-Xms128m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8"
usage() { echo "Usage: sh 执行脚本.sh [start|stop|restart|status]" exit 1 }
is_exist(){ pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' ` if [ -z "${pid}" ]; then return 10 else return 0 fi }
start(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is already running. pid=${pid} ." else nohup java $JVM_OPTS -jar $APP_PATH > $LOG_FILE 2>&1 & echo "${APP_NAME} started" fi }
stop(){ is_exist if [ $? -eq "0" ]; then kill -9 $pid echo "${APP_NAME} stoped" else echo "${APP_NAME} is not running" fi }
status(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is running. Pid is ${pid}" else echo "${APP_NAME} is NOT running." fi }
restart(){ status stop start status }
case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac
|
新建一个start.sh,复制代码进去,塞到项目根目录中,修改相应变量即可使用
启动命令
重新启动命令
关闭命令
查看运行状态命令
tips:可以给日志命名为日期形式的:
1 2
| nohup start.sh >> `date -d yesterday +%Y%m%d`.log 2>&1 & nohup start.sh >> `date -d today +%Y%m%d`.log 2>&1 &
|
shell输出日期格式:
1 2 3 4 5
| [root@VM-4-7-centos ~]# date -d yesterday +%Y-%m-%d 2023-04-16 [root@VM-4-7-centos ~]# date -d today +%Y-%m-%d 2023-04-17 [root@VM-4-7-centos ~]#
|