Linux CentOS 系统,Systemd 配置文件模板和使用说明,设置 MinIO Systemd 服务管理实例

一、Linux CentOS 系统,Systemd 配置文件模板和使用说明

在 CentOS 系统中,systemd 是系统的初始化进程(PID 1),负责管理系统服务(守护进程)的启动、停止、依赖关系和开机自启等。编写 systemd 配置文件(也称为单元文件)是管理服务的核心。

以下是 systemd 服务配置文件的通用模板、各配置项的详细说明以及使用步骤。

📄 通用配置文件模板

你可以将以下内容保存为 /etc/systemd/system/your-service-name.service

ini 复制代码
[Unit]
# 服务的描述信息
Description=My Custom Application Service
# 服务的文档地址(可选)
Documentation=man:gitlab-ctl(1) https://example.com/docs
# 指定本服务在哪些服务之后启动
After=network.target docker.service
# 指定本服务在哪些服务之前启动
Before=tomcat.service
# 强依赖关系,如果列出的服务启动失败,本服务也不会启动
Requires=docker.service
# 弱依赖关系,推荐使用,即使依赖的服务启动失败,本服务仍会尝试启动
Wants=network-online.target

[Service]
# 服务的类型
# simple: 默认值,ExecStart启动的进程为主进程
# forking: 启动命令将以fork()形式启动,父进程退出,子进程继续运行
# oneshot: 一次性进程,执行完即结束(常用于脚本)
# notify: 类似simple,但会等待服务通过sd_notify()发出就绪信号
Type=simple
# 启动服务时执行的命令
ExecStart=/usr/bin/python3 /opt/myapp/app.py
# 启动前执行的命令(可选)
ExecStartPre=/bin/mkdir -p /var/run/myapp
# 停止服务时执行的命令
ExecStop=/bin/kill -SIGTERM $MAINPID
# 重启服务时执行的命令
ExecReload=/bin/kill -SIGHUP $MAINPID
# 服务的重启策略
# no: 不重启
# on-failure: 发生错误时重启(推荐)
# always: 总是重启
Restart=on-failure
# 重启前的等待时间(秒)
RestartSec=5
# 服务运行的用户和组
User=myuser
Group=mygroup
# 服务的工作目录
WorkingDirectory=/opt/myapp
# 环境变量文件路径(可选)
EnvironmentFile=/etc/sysconfig/myapp
# 标准输出和标准错误输出的位置
StandardOutput=journal
StandardError=journal

[Install]
# 指定服务安装(enable)时所属的目标
# multi-user.target: 多用户文本模式
# graphical.target: 图形界面模式
WantedBy=multi-user.target

🧩 配置项详细说明

[Unit] 区块:服务元数据与依赖
  • Description: 服务的简短描述,便于识别。
  • After / Before : 定义服务的启动顺序。例如,After=network.target 表示网络启动后,本服务才启动。
  • Requires / Wants : 定义服务间的依赖关系。
    • Requires: 强依赖。如果依赖的服务启动失败,本服务也不会启动。
    • Wants: 弱依赖。即使依赖的服务启动失败,本服务仍会尝试启动,这是更常用的做法。
[Service] 区块:进程运行配置
  • Type : 定义服务的启动类型。
    • simple (默认): ExecStart 启动的进程就是主进程。
    • forking: 适用于传统的守护进程(daemon),启动命令会 fork 一个子进程,然后父进程退出。
    • oneshot: 适用于只运行一次的脚本,执行完即结束。
  • ExecStart : 启动服务时执行的命令。注意: 这里不能使用 & 将进程放入后台,也不能使用管道 | 或重定向 >(除非在命令中用 sh -c 包裹)。
  • Restart : 定义服务异常退出后的重启策略。
    • no: 不重启。
    • on-failure: 当进程以非零退出码退出,或被信号异常终止,或超时时重启。(最常用)
    • always: 无论何种原因退出,都无条件重启。
  • User / Group : 指定服务运行的用户和组,出于安全考虑,不建议使用 root,除非必要。
  • WorkingDirectory: 指定服务的工作目录,避免脚本中使用相对路径出错。
[Install] 区块:开机启动配置
  • WantedBy : 定义服务在哪个系统目标(target)下启动。
    • multi-user.target: 类似于传统的运行级别 3,多用户文本模式,适用于服务器。
    • graphical.target: 类似于传统的运行级别 5,图形界面模式。

🛠️ 使用步骤

  1. 创建服务文件

    使用文本编辑器在 /etc/systemd/system/ 目录下创建服务文件。此目录下的文件优先级最高,推荐在此处创建自定义服务。

    bash 复制代码
    sudo vi /etc/systemd/system/myapp.service
  2. 重新加载配置

    每次修改或创建服务文件后,必须执行此命令,让 systemd 重新读取配置。

    bash 复制代码
    sudo systemctl daemon-reload
  3. 启动服务

    bash 复制代码
    sudo systemctl start myapp.service

    注:.service 后缀可以省略。

  4. 设置开机自启

    bash 复制代码
    sudo systemctl enable myapp.service
  5. 查看服务状态

    这是排查服务启动失败问题的最重要命令。

    bash 复制代码
    sudo systemctl status myapp.service

    如果服务启动失败,状态信息中通常会包含错误原因,或者你可以使用 journalctl 查看详细日志:

    bash 复制代码
    # 查看服务的实时日志
    sudo journalctl -u myapp.service -f
    # 查看服务本次启动以来的日志
    sudo journalctl -u myapp.service --since today

💡 常用管理命令速查

命令 说明
systemctl start <服务名> 立即启动服务
systemctl stop <服务名> 立即停止服务
systemctl restart <服务名> 重启服务
systemctl reload <服务名> 重载服务配置(不中断服务)
systemctl enable <服务名> 设置开机自启
systemctl disable <服务名> 取消开机自启
systemctl status <服务名> 查看服务运行状态
systemctl is-enabled <服务名> 检查服务是否设置为开机启动
journalctl -u <服务名> 查看服务日志

二、设置 MinIO Systemd 服务管理实例

6.1.4 部署MinIO

server01部署MinIO,安装方式采用rpm离线安装,具体步骤可参考官方文档

  1. 获取MinIO安装包

    下载地址如下:https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm,通过以下命令可直接将安装包下载至服务器

    bash 复制代码
    wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm

    注:若下载缓慢,大家可直接使用课程资料中附带的安装包

  2. 安装MinIO

    bash 复制代码
    rpm -ivh minio-20230809233022.0.0.x86_64.rpm
  3. 集成Systemd

    • Systemd概述

      Systemd是一个广泛应用于Linux系统的系统初始化和服务管理器,其可以管理系统中的各种服务和进程,包括启动、停止和重启服务,除此之外,其还可以监测各服务的运行状态,并在服务异常退出时,自动拉起服务,以保证服务的稳定性。系统自带的防火墙服务firewalld,我们自己安装的mysqldredis均是由Systemd进行管理的,此处将MinIO服务也交给Systemd管理。

    • 编写MinIO服务配置文件

      Systemd所管理的服务需要由一个配置文件进行描述,这些配置文件均位于/etc/systemd/system/或者/usr/lib/systemd/system/目录下,下面创建MinIO服务的配置文件。

      执行以下命令创建并打开minio.service文件

      bash 复制代码
      vim /etc/systemd/system/minio.service

      内容如下,具体可参考MinIO官方文档

      ini 复制代码
      [Unit]
      Description=MinIO
      Documentation=https://min.io/docs/minio/linux/index.html
      Wants=network-online.target
      After=network-online.target
      AssertFileIsExecutable=/usr/local/bin/minio
      
      [Service]
      WorkingDirectory=/usr/local
      ProtectProc=invisible
      EnvironmentFile=-/etc/default/minio
      ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
      ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
      Restart=always
      LimitNOFILE=65536
      TasksMax=infinity
      TimeoutStopSec=infinity
      SendSIGKILL=no
      
      [Install]
      WantedBy=multi-user.target

      注意

      重点关注上述文件中的以下内容即可

      • EnvironmentFile,该文件中可配置MinIO服务所需的各项参数
      • ExecStart,该参数用于配置MinIO服务的启动命令,其中$MINIO_OPTS$MINIO_VOLUMES,均引用于EnvironmentFile中的变量。
        • MINIO_OPTS用于配置MinIO服务的启动选项,可省略不配置。
        • MINIO_VOLUMES用于配置MinIO服务的数据存储路径。
      • Restart,表示自动重启
    • 编写EnvironmentFile文件

      执行以下命令创建并打开/etc/default/minio文件

      bash 复制代码
      vim /etc/default/minio

      内容如下,具体可参考官方文档

      ini 复制代码
      MINIO_ROOT_USER=minioadmin
      MINIO_ROOT_PASSWORD=minioadmin
      MINIO_VOLUMES=/data
      MINIO_OPTS="--console-address :9001"

      注意

      • MINIO_ROOT_USERMINIO_ROOT_PASSWORD为用于访问MinIO的用户名和密码,密码长度至少8位

      • MINIO_VOLUMES用于指定数据存储路径,需确保指定的路径是存在的,可执行以下命令创建该路径。

        bash 复制代码
        mkdir /data
      • MINIO_OPTS中的console-address,用于指定管理页面的地址。

  4. 启动MinIO

    执行以下命令启动MinIO

    bash 复制代码
    systemctl start minio

    执行以下命令查询运行状态

    bash 复制代码
    systemctl status minio

    设置MinIO开机自启

    bash 复制代码
    systemctl enable minio
  5. 访问MinIO管理页面

    管理页面的访问地址为:http://192.168.10.101:9001

    注意

    ip需要根据实际情况做出修改

相关推荐
小白同学_C6 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖6 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
2601_949146536 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
儒雅的晴天6 小时前
大模型幻觉问题
运维·服务器
Gofarlic_OMS7 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
通信大师7 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
dixiuapp7 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化
不做无法实现的梦~8 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
Elastic 中国社区官方博客8 小时前
如何防御你的 RAG 系统免受上下文投毒攻击
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
小锋学长生活大爆炸8 小时前
【教程】免Root在Termux上安装Docker
运维·docker·容器