告别Java -Jar启动!告诉你启动单机SpringBoot服务的正确操作方式

开发 后端
此操作只针对于测试环境或单机部署的情况下,使用Jenkins自动化部署或docker部署SpringBoot服务请忽略。

一、安装Java运行时环境,这里我们使用开源免费的OpenJDK11

查看OpenJDK11安装包列表

yum list|grep java-11-openjdk

执行安装命令。

yum install -y java-11-openjdk.x86_64

查看安装成功的版本。

[root@localhost ~]# java -version
openjdk version "11.0.21" 2023-10-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.21.0.9-1.el7_9) (build 11.0.21+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.21.0.9-1.el7_9) (build 11.0.21+9-LTS, mixed mode, sharing)

设置JAVA_HOME。

通过命令查找java安装的真实路径,使用which java找到的是软链接,需要通过ll命令一层层查找真实路径,我们这边最终/usr/bin/java真实的路径为 /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java,那么我们的JAVA_HOME就是java的安装目录/usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64,去掉 末尾的 /bin/java 。

[root@localhost ~]# which java
/usr/bin/java
[root@localhost ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Jan  2 16:13 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 64 Jan  2 16:13 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java
[root@localhost ~]# ll /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java
-rwxr-xr-x 1 root root 13192 Nov 15 00:51 /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java

编辑/etc/profile文件,添加JAVA_HOME配置,并使用source /etc/profile命令使环境配置生效,不需要配置CLASS_APTH, rt.jar, tools.jar。

vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

二、编写启动、停止SpringBoot服务的Shell脚本

定义运行服务需要的参数,服务名称、服务程序路径、日志文件等,这里可以感觉自己的需要来定义,包括可以添加java -jar的运行参数等。

#!/bin/bash
APP_NAME="gitegg-application.jar" # 命令号提示服务名
APP_PATH="/opt/server/gitegg-application.jar" # jar包文件路径
LOG_FILE="/opt/server/gitegg-application.log" # 日志输出文件路径,一般我们服务会记录日志,如果不想在这里输出,那么可以填写 /dev/null

定义命令脚本运行提示,如果输入的命令格式错误,这里可以给出正确的命令格式等。

#使用说明,提示输入参数
usage() {
 echo "Usage: sh start_server.sh [start|stop|restart|status]"
 exit 1
}

定义检查服务是否正在运行的函数。

#检查服务是否正在运行
is_running(){
 pid=`ps -ef|grep $APP_PATH|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; then
 return 1
 else
 return 0
 fi
}

定义启动服务的函数。

#启动服务
start(){
  is_running
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    nohup java -jar $APP_PATH > $LOG_FILE 2>&1 &
  fi
}

定义停止服务的函数。

#停止服务
stop(){
  is_running
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}

定义查看服务运行状态的函数。

#显示运行状态
status(){
  is_running
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

定义服务重启函数。

#重启服务
restart(){
  stop
  start
}

脚本接收参数,根据参数执行对应的命令函数。

#选择要运行的命令
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

设置脚本执行权限,填写自己脚本文件的实际路径。

chmod +x /opt/server/start_server.sh

完整的执行脚本如下:

#!/bin/bash
APP_NAME="gitegg-application.jar" # 命令号提示服务名
APP_PATH="/opt/server/gitegg-application.jar" # jar包文件路径
LOG_FILE="/opt/server/gitegg-application.log" # 日志输出文件路径,一般我们服务会记录日志,如果不想在这里输出,那么可以填写 /dev/null
 
#使用说明,提示输入参数
usage() {
 echo "Usage: sh start_server.sh [start|stop|restart|status]"
 exit 1
}
 
#检查服务是否正在运行
is_running(){
 pid=`ps -ef|grep $APP_PATH|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; then
 return 1
 else
 return 0
 fi
}
 
#启动服务
start(){
  is_running
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    nohup java -jar $APP_PATH > $LOG_FILE 2>&1 &
  fi
}
 
#停止服务
stop(){
  is_running
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}
 
#显示运行状态
status(){
  is_running
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}
 
#重启服务
restart(){
  stop
  start
}
 
#选择要运行的命令
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

三、编写启动、停止SpringBoot服务的Shell脚本

在CentOS中的服务是由systemd管理的,可以通过systemctl命令进行服务运行的相关操作。

新增管理服务gitegg-server.service,服务名称可以自己定义,此服务放到 /lib/systemd/system/ 目录。

vi /lib/systemd/system/gitegg-server.service

编写服务内容。

[Unit]                                                                                                                                                                                                               
Description=gitegg-server                                                                                                                                                                                  
After=docker.socket early-docker.target network.target
Wants=network-online.target docker.service
Requires=docker.socket                                                                                                                                                                                            
                                                                                                                                                                                                                     
[Service]                                                                                                                                                                                                            
Type=forking                                                                                                                                                                                                         
ExecStart=/opt/server/start_server.sh start
ExecStop=/opt/server/start_server.sh stop            
ExecSatus=/opt/server/start_server.sh status                                              
ExecRestart=/opt/server/start_server.sh restart                                                       
                                                                                                                                                                                               
[Install]                                                                                                                                                                                                            
WantedBy=multi-user.target

保存并重新加载配置。

systemctl daemon-reload

设置服务开机启动。

systemctl enable gitegg-server.service

可以直接使用systemctl 命令操作服务。

# 启动服务
systemctl start gitegg-server.service
# 关闭服务
systemctl stop gitegg-server.service
# 查看服务状态
systemctl status gitegg-server.service
# 重启服务
systemctl restart gitegg-server.service
责任编辑:姜华 来源: 今日头条
相关推荐

2023-09-01 08:26:06

SpringBootjar包war包

2010-05-26 08:56:42

MySQL服务不能启动

2011-05-27 13:36:30

Android SDK

2021-08-06 12:47:22

Windows 10Windows微软

2021-08-06 22:41:53

Windows微软自启动

2022-02-17 08:20:17

Spring执行代码SpringBoot

2023-07-03 08:29:11

BannerSpringBoot

2019-08-08 18:14:43

戴尔

2023-06-30 07:51:44

springboot初始化逻辑

2024-11-15 16:35:13

2009-11-19 17:08:55

Oracle数据服务器

2010-06-13 15:10:49

MySQL loadd

2011-03-22 09:16:00

启动Nagios

2011-03-28 11:30:32

启动nagios

2009-04-15 20:15:02

WindowsLinux双系统启动

2022-11-21 08:11:18

2021-01-08 05:20:22

Springboot应用

2010-04-09 13:35:35

Oracle启动

2022-05-17 08:44:33

数据库MySQL

2011-03-24 10:08:41

nagios启动
点赞
收藏

51CTO技术栈公众号