一、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,图形界面模式。
🛠️ 使用步骤
-
创建服务文件
使用文本编辑器在
/etc/systemd/system/目录下创建服务文件。此目录下的文件优先级最高,推荐在此处创建自定义服务。bashsudo vi /etc/systemd/system/myapp.service -
重新加载配置
每次修改或创建服务文件后,必须执行此命令,让
systemd重新读取配置。bashsudo systemctl daemon-reload -
启动服务
bashsudo systemctl start myapp.service注:
.service后缀可以省略。 -
设置开机自启
bashsudo systemctl enable myapp.service -
查看服务状态
这是排查服务启动失败问题的最重要命令。
bashsudo 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离线安装,具体步骤可参考官方文档。
-
获取MinIO安装包
bashwget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm注:若下载缓慢,大家可直接使用课程资料中附带的安装包
-
安装MinIO
bashrpm -ivh minio-20230809233022.0.0.x86_64.rpm -
集成Systemd
-
Systemd概述
Systemd是一个广泛应用于Linux系统的系统初始化和服务管理器,其可以管理系统中的各种服务和进程,包括启动、停止和重启服务,除此之外,其还可以监测各服务的运行状态,并在服务异常退出时,自动拉起服务,以保证服务的稳定性。系统自带的防火墙服务firewalld,我们自己安装的mysqld和redis均是由Systemd进行管理的,此处将MinIO服务也交给Systemd管理。 -
编写MinIO服务配置文件
Systemd所管理的服务需要由一个配置文件进行描述,这些配置文件均位于
/etc/systemd/system/或者/usr/lib/systemd/system/目录下,下面创建MinIO服务的配置文件。执行以下命令创建并打开
minio.service文件bashvim /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文件bashvim /etc/default/minio内容如下,具体可参考官方文档。
iniMINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=minioadmin MINIO_VOLUMES=/data MINIO_OPTS="--console-address :9001"注意
-
MINIO_ROOT_USER和MINIO_ROOT_PASSWORD为用于访问MinIO的用户名和密码,密码长度至少8位。 -
MINIO_VOLUMES用于指定数据存储路径,需确保指定的路径是存在的,可执行以下命令创建该路径。bashmkdir /data -
MINIO_OPTS中的console-address,用于指定管理页面的地址。
-
-
-
启动MinIO
执行以下命令启动MinIO
bashsystemctl start minio执行以下命令查询运行状态
bashsystemctl status minio设置MinIO开机自启
bashsystemctl enable minio -
访问MinIO管理页面
管理页面的访问地址为:
http://192.168.10.101:9001注意:
ip需要根据实际情况做出修改