首页 > 系统相关 >一文搞懂 systemd 服务管理:Linux 服务自动启动与重启完整教程

一文搞懂 systemd 服务管理:Linux 服务自动启动与重启完整教程

时间:2025-01-17 14:28:56浏览次数:3  
标签:systemd 服务 service aps 重启 Linux 搞懂 日志

言简意赅的讲解systemd服务的自动启动与重启解决的痛点

在Linux 系统中,systemd 是管理服务的核心工具。它不仅可以让服务在系统启动时自动运行,还能实现服务的监控和自动重启功能。本文将从基础知识出发,手把手教你如何用 systemd 配置一个 Java 服务 (aps-0.0.1-SNAPSHOT.jar) 实现自动启动与重启。


为什么选择 systemd

systemd 是目前主流 Linux 发行版的默认初始化系统。相比于传统的 SysVinitUpstart,它的优势包括:

  1. 统一的服务管理:通过简单的命令启动、停止、重启、启用或禁用服务。
  2. 强大的监控能力:支持服务自动重启,定义最大尝试次数等。
  3. 灵活的依赖管理:定义服务之间的依赖关系。
  4. 日志集成:每个服务的日志都可以通过 journalctl 轻松查看。

准备工作

在开始配置 systemd 服务之前,请确保你已经完成以下步骤:

  1. 安装 Java 环境:确保你的 Linux 系统已安装合适版本的 Java,可以用以下命令确认:
    java -version
    
  2. 存放可执行文件:将你的 aps-0.0.1-SNAPSHOT.jar 文件放置到指定目录,例如 /root/aps-0.0.1-SNAPSHOT.jar

创建一个 systemd 服务文件

1. 什么是 systemd 服务文件?

systemd 服务文件是 .service 文件,存储在 /etc/systemd/system/ 中,描述了如何启动、停止和管理一个服务。通过创建一个自定义服务文件,可以轻松实现服务的自动启动和重启。

2. 创建服务文件

/etc/systemd/system/ 下创建服务文件:

sudo nano /etc/systemd/system/aps.service

填写以下内容:

[Unit]
Description=APS Java Service                # 服务描述
After=network.target                        # 依赖网络服务,网络启动后再启动

[Service]
ExecStart=/usr/bin/java -jar /root/aps-0.0.1-SNAPSHOT.jar  # 启动命令
Restart=always                              # 自动重启策略,always 表示任何情况下都重启
RestartSec=10                               # 重启前等待的秒数
User=root                                   # 指定运行用户
WorkingDirectory=/root                      # 工作目录
StandardOutput=journal                      # 日志输出到 systemd 日志
StandardError=journal                       # 错误日志输出到 systemd 日志

[Install]
WantedBy=multi-user.target                  # 服务运行级别,通常为多用户模式

systemd创建服务文件

3. 参数详解

  • ExecStart:定义服务启动时执行的命令,这里运行一个 Java jar 文件。
  • Restart:定义服务的重启策略,可选项包括:
    • no:默认值,不自动重启。
    • on-failure:服务因非 0 返回码或信号失败时重启。
    • always:无论失败或手动停止,都自动重启。
  • RestartSec:设置服务重启之间的间隔时间。
  • StandardOutputStandardError:定义服务的标准输出和错误日志的保存位置。
  • WantedBy:指定目标运行级别,multi-user.target 是最常用的运行模式。

激活和管理服务

1. 重新加载 systemd 配置

在修改或新增服务文件后,需要让 systemd 重新加载配置:

sudo systemctl daemon-reload

2. 启动服务

手动启动服务:

sudo systemctl start aps.service

systemd start服务

3. 设置开机自动启动

让服务随系统启动:

sudo systemctl enable aps.service

4. 检查服务状态

确认服务是否运行正常:

sudo systemctl status aps.service

systemd检查服务状态


测试自动重启功能

为了验证服务的自动重启功能,可以尝试以下操作:

  1. 手动停止服务

    sudo kill $(pidof java)
    

    服务应该在 10 秒后自动重启。
    ps -ef查看服务状态

  2. 查看服务日志
    查看实时日志,确认服务的重启记录:

    journalctl -u aps.service -f
    

更多进阶功能

1. 限制重启次数

通过增加 StartLimitIntervalSecStartLimitBurst 参数,可以限制服务在一定时间内的最大重启次数:

[Service]
Restart=always
RestartSec=10
StartLimitIntervalSec=300     # 300 秒内最多尝试 5 次重启
StartLimitBurst=5

2. 定义服务依赖

如果服务需要依赖其他服务,例如数据库,可以在 [Unit] 中增加 RequiresAfter

[Unit]
Description=APS Java Service
After=network.target mysql.service
Requires=mysql.service

3. 环境变量支持

可以通过 Environment 定义服务所需的环境变量:

[Service]
Environment="JAVA_OPTS=-Xms512m -Xmx1024m"
ExecStart=/usr/bin/java $JAVA_OPTS -jar /root/aps-0.0.1-SNAPSHOT.jar

常见问题与排查

  1. 服务无法启动

    • 使用以下命令查看具体错误日志:
      journalctl -u aps.service
      
  2. 服务未按预期重启

    • 检查 RestartRestartSec 配置是否正确。
  3. 权限问题

    • 如果服务不是以 root 用户运行,确保指定用户对工作目录和文件有访问权限。

总结

通过本文,你已经学习了如何利用 systemd 实现服务的自动启动和重启。systemd 是一个强大且灵活的工具,适用于大多数场景:

  • 自动管理后台服务
  • 简化日志查看和监控
  • 配置灵活的服务重启策略

通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强

Best
Wenhao (楠博万)

标签:systemd,服务,service,aps,重启,Linux,搞懂,日志
From: https://blog.csdn.net/m0_70878103/article/details/145096348

相关文章

  • linux系统串口终端软件显示异常解决方法,触觉智能出品
    本文介绍linux系统串口终端软件显示异常解决方法,以xshell软件为例。使用触觉智能的PurplePiR1双网口开发板演示,内置双核A71.2Ghz处理器,支持WiFi与丰富GPIO拓展,是嵌入式新人入门学习的高性价比开发板!使用resize命令调整终端命令终端大小不对的情况如下图:使用resize命令调整......
  • Linux基础-指令篇01【入门级】
    工具安装需要用到VMware,大家自行安装,如果有需要后续会上传相关文件和详细安装步骤嵌入式系统专业定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,对功能,可靠性,成本,体积,功耗等严格要求的专用计算机系统。简单理解:除了pc和一些高级的控制台之外,绝大多数的控制类设备都是嵌......
  • Linux 查看目录下的文件夹命令与 find 查找某个目录但不包括该目录本身
    在Linux系统中,管理和查找文件及文件夹是日常运维和开发过程中常见的任务。本文将介绍如何查看目录下的文件夹,并使用 find 命令查找特定目录下的内容,但排除该目录本身。我们将详细讨论以下内容:使用 ls 命令查看目录下的文件夹。使用 find 命令查找特定目录内容并排除该......
  • Linux驱动开发:一文掌握 块设备VS字符设备开发流程全解!
    Linux驱动开发是嵌入式系统开发中的一个重要组成部分,它直接关系到硬件设备的功能实现和性能优化。在Linux系统中,驱动开发主要分为字符设备驱动、块设备驱动和网络设备驱动三大类。本文将重点介绍字符设备和块设备的基础知识,以及它们在驱动开发中的差异和开发流程。一、字符设......
  • Linux进程概念-进程状态
    在上一篇已经了解了在进程中的基本概念,现在我来了解一下进程的相关状态;对于进程的状态,在详细了解之前我们可以来一个粗略的理解:进程的状态可以理解为就是一个整数,用宏定义实现R,S等状态;也就是进程状态就是take_struck内的一个整数;如果不理解也没关系,下面来看看对进程状......
  • Linux内存泄露案例分析和内存管理分享
    作者:京东科技李遵举一、问题近期我们运维同事接到线上LB(负载均衡)服务内存报警,运维同事反馈说LB集群有部分机器的内存使用率超过80%,有的甚至超过90%,而且内存使用率还再不停的增长。接到内存报警的消息,让整个团队都比较紧张,我们团队负责的LB服务是零售、物流、科技等业务服务的流......
  • 工作中用到的linux的命令
    常用的命令汇总创建后台进程ping本机地址使用以下命令在后台执行ping本机地址:ping127.0.0.1&查找创建的后台进程并强制杀掉查看当前进程并杀掉指定的后台进程,可以使用以下命令:psaux|grepping#查找ping进程kill-9<PID>#使用进程ID强制......
  • Linux 找到占用磁盘最多的文件或目录,可以使用du和sort
    想要找到占用磁盘最多的文件或目录,可以使用du和sort命令: du-h/path/to/directory|sort-rh|head-n10其中:du-h/path/to/directory用于计算指定目录下的所有文件和子目录的大小,并以人类可读的格式显示。sort-rh用于按磁盘使用情况的大小(逆序)对输出进行排序。h......
  • Linux小知识
    linux命令使用方法,在网页中搜索命令用Ctrl+F查看命令用法可以在命令后加-h或--help,或者用man<command>查看详细用法常用命令nohup不挂断地执行命令烦恼于晚上跑的任务因为网络波动或是电脑自动重启挂了?用它就对了!nohup<command>[>logfile][2>&1][&]最常用的方......
  • Linux系统中 ping 的平均时间
    使用ping命令可以测试网络连接的质量,包括延迟和丢包率。在Linux系统中,计算ping命令的耗时可以通过以下方法进行:ping-c5域名|grep'rttmin/avg/max/mdev'|awk-F'[/]''{print$8,$NF}'ping-c5域名:向域名发送5次ICMP请求包(-c5表示发送5个包)。g......