在 Linux 系统中将 Spring Boot 应用作为系统服务运行

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【6月更文挑战第11天】最近由于一些原因,服务器经常会重启,每次重启后需要手动启动 Spring Boot 的工程,因此我需要将其配置成开启自启动的服务。

今天处理一个遗留项目的问题,有一个 Spring Boot 项目部署在一台客户内网的物理服务器上,最近由于一些原因,服务器经常会重启,每次重启后需要手动启动 Spring Boot 的工程,因此我需要将其配置成开启自启动的服务。

完成这件事需要借助 systemd
它提供了一套系统启动和管理的解决方案。根据惯例,在 Linux 中,d 一般表示守护进程(daemon),比如 httpd 等。

要让一个 Spring Boot 服务随系统启动,最简单的办法就是通过 systemd 将其配置成一个系统服务。

首先,需要编写 Spring Boot 应用的启动、停止、重启三个脚本,我们的程序 JAR 包是 /path/to/xxx.jar

  • start.sh:
#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
APP_NAME=xxx
nohup java -jar /path/to/xxx.jar.jar > xxx.log 2>&1 &
echo "$APP_NAME is running"
  • stop.sh:
#!/bin/bash
APP_NAME=xxx
pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'`

if [ -z "${pid}" ]; then
   echo "$APP_NAME is not running"
else
    echo "kill thread...$pid"
    kill -9 $pid
fi
  • restart.sh:
#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
APP_NAME=xxx
pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'`

if [ -z "${pid}" ]; then
   echo "$APP_NAME is not running"
else
    echo "kill thread...$pid"
    kill -9 $pid
fi

nohup java -jar /path/to/xxx.jar > xxx.log 2>&1 &
echo "$APP_NAME is running"

以上三个脚本:

  • start.sh 是启动脚本,提供 Java 的路径,执行 JAR 文件的启动命令,输出信息。
  • stop.sh 是停止脚本,通过 ps 命令,找到程序对应进程的 PID,如果不存在,说明程序没有运行,不要任何操作,如果存在,则用 kill 命令将其杀掉。
  • restart.sh 是重启脚本,就是将以上两者结合,先终止程序,再启动。

将这三个脚本放在 /path/to/bin/ 目录中,有了以上三个脚本,现在我们配置系统服务(假设服务命名为 xxx)。

/usr/lib/systemd/system/ 目录中,创建 xxx.service 文件,其内容为:

[Unit]
Description=xxx
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/path/to/bin/start.sh
ExecReload=/path/to/bin/restart.sh
ExecStop=/path/to/bin/stop.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

在这个文件中,有三个部分:

  • Unit 区块中,包含了描述内容和启动顺序的配置,After 表示在这些服务启动之后启动。
  • Service 区块主要配置启动行为,使用了之前的三个脚本文件,分别作为服务的启动、终止、重启的脚本。
  • Install 区块配置如何安装这个配置文件,WantedBy=multi-user.target 表示这个服务所在的 Target 是 multi-user.target。

有了这个配置文件,就可以使用一下命令来操作这个服务:

# 启动服务
systemctl start xxx
# 停止服务
systemctl stop xxx
# 重启服务
systemctl restart xxx
# 查看启动状态
systemctl status xxx

如果要让服务随系统启动,只需要执行如下命令:

systemctl enable xxx

如果要取消随系统启动:

systemctl disable xxx
目录
相关文章
|
1天前
|
Linux
Linux系统中,根目录
【7月更文挑战第14天】
12 4
|
3天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的武汉市公交路线查询系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的武汉市公交路线查询系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
3天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的旅游攻略系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的旅游攻略系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
3天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的公交系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的公交系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
2天前
|
Ubuntu Linux Shell
Ubuntu/linux系统环境变量配置详解
理解和掌握如何配置环境变量对于使用和管理Ubuntu/Linux系统非常重要。
10 2
|
1天前
|
监控 安全 Linux
Linux命令ssltap的深入解析与应用实践
`ssltap`是一个假想的Linux命令,用于模拟SSL/TLS流量分析。它捕获、解密(如果有密钥)并分析加密流量,提供实时监控、协议解析和安全审计。特点包括实时性、灵活性、可扩展性和安全性。示例用法包括捕获特定端口流量和实时监控会话状态。在实际操作中应注意私钥安全、性能影响及合规性,建议定期审计和自动化监控。
|
2天前
|
监控 Linux Shell
Linux系统之nice命令的基本使用
【7月更文挑战第10天】Linux系统之nice命令的基本使用
11 0
|
2月前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
797 0
|
2月前
|
关系型数据库 MySQL Linux
卸载、下载、安装mysql(Linux系统centos7)
卸载、下载、安装mysql(Linux系统centos7)
133 0
|
10天前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD