Linux / Ubuntu systemd 服务使用说明

本文记录在 Ubuntu / Linux 系统中使用 systemd + systemctl 管理系统服务时的常见目录结构、.service 文件位置以及 .service.d 目录的作用。


1. systemd 简介

现代 Linux 发行版(如 Ubuntu、Debian、CentOS 等)大多使用 systemd 作为系统初始化与服务管理系统。

常见管理命令:

  • systemctl start xxx 启动服务

  • systemctl stop xxx 停止服务

  • systemctl restart xxx 重启服务

  • systemctl status xxx 查看服务状态

  • systemctl enable xxx 设置开机启动

  • systemctl disable xxx 取消开机启动


2. .service 文件位置

在 systemd 中,一个服务通常由一个 .service 文件定义。

不同来源的服务文件会放在不同目录。

2.1 系统或软件包自带服务

通常由 apt / yum 等包管理器安装。

常见位置:

复制代码
/lib/systemd/system/
​
/usr/lib/systemd/system/

特点:

  • 由系统或软件包提供

  • 软件升级时可能被覆盖

  • 不建议直接修改

例如:

复制代码
/lib/systemd/system/nginx.service
/lib/systemd/system/docker.service

2.2 管理员自定义服务

管理员自己创建的服务应放在:

复制代码
/etc/systemd/system/

例如:

复制代码
/etc/systemd/system/myapp.service

特点:

  • 用户自定义

  • 优先级高于 /lib/systemd/system

  • 不会被软件升级覆盖


3. xxx.service.d 目录的作用

当需要 修改已有服务配置 ,但又不想直接修改原 .service 文件时,可以使用:

复制代码
xxx.service.d/

示例:

复制代码
/etc/systemd/system/nginx.service.d/

在该目录中可以放置额外配置文件,例如:

复制代码
/etc/systemd/system/nginx.service.d/override.conf

示例内容:

复制代码
[Service]
Restart=always
RestartSec=5

systemd 在加载服务时会:

  1. 读取原始 .service

  2. 再读取 .service.d/*.conf

  3. 合并配置

因此 .service.d 可以理解为:

复制代码
补丁配置 / 覆盖配置

优点:

  • 不修改原文件

  • 软件升级不会覆盖

  • 只修改需要调整的部分


4. 什么时候使用 .service.d

情况一:创建新服务

直接创建 .service 文件。

例如:

复制代码
/etc/systemd/system/myapp.service

情况二:修改已有服务

不要修改:

复制代码
/lib/systemd/system/docker.service

而是创建:

复制代码
/etc/systemd/system/docker.service.d/override.conf

例如:

复制代码
[Service]
Restart=always

5. systemd 配置优先级

systemd 加载服务时优先级大致如下:

复制代码
/etc/systemd/system      (管理员配置,优先级最高)
​
/run/systemd/system      (运行时配置)
​
/lib/systemd/system
/usr/lib/systemd/system  (系统默认服务)

因此:

复制代码
/etc/systemd/system > /lib/systemd/system

6. 创建一个自定义服务示例

创建服务文件:

复制代码
sudo nano /etc/systemd/system/myapp.service

内容示例:

复制代码
[Unit]
Description=My Java Application
After=network.target
​
[Service]
User=root
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
Restart=always
RestartSec=5
​
[Install]
WantedBy=multi-user.target

7. 重新加载 systemd

修改或新增服务后需要刷新 systemd:

复制代码
sudo systemctl daemon-reload

8. 常用管理命令

启动服务:

复制代码
sudo systemctl start myapp

停止服务:

复制代码
sudo systemctl stop myapp

查看状态:

复制代码
sudo systemctl status myapp

设置开机启动:

复制代码
sudo systemctl enable myapp

取消开机启动:

复制代码
sudo systemctl disable myapp

9. 查看最终合并配置

systemd 可以查看完整服务配置:

复制代码
systemctl cat myapp

输出会显示:

  • .service 文件

  • .service.d/*.conf 覆盖配置

方便排查配置来源。


10. 快速记忆总结

可以这样理解 systemd 服务结构:

复制代码
.service            = 主配置文件
​
.service.d/*.conf   = 覆盖 / 补丁配置

目录含义:

复制代码
/lib/systemd/system/    系统或软件包自带服务
​
/etc/systemd/system/    管理员自定义服务(优先生效)
​
xxx.service.d/          对已有服务做局部覆盖

简单记忆:

复制代码
系统默认 → /lib/systemd/system
自己写的 → /etc/systemd/system
覆盖修改 → xxx.service.d
相关推荐
xx~t1 小时前
嵌入式学习——ARM1
linux·arm开发·嵌入式硬件·arm
xx~t1 小时前
嵌入式——ARM1(详细篇)
linux·arm开发·嵌入式硬件·arm
我要见SA姐12 小时前
告别 Copilot?Codex 本地化部署指南
运维·数据库·机器学习·oracle·回归
Elastic 中国社区官方博客3 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
大数据·运维·数据库·elasticsearch·搜索引擎
fengkai45453 小时前
八、Docker详解4-5
运维·docker
智恒百亿4 小时前
RTX 5090 八卡服务器 vs RTX PRO 6000 整机:AI 推理、微调与渲染选型部署指南
运维·服务器·rtx5090
DYWorker0014 小时前
Linux驱动子系统:DMA-Buf —— Consumer和Provider(008)
linux·驱动开发
雯宝5 小时前
Linux 内核函数集
linux
GeW6 小时前
从挂科到高分通过:RHCE快速拿证的10个提分技巧
linux
蓝胖的四次元口袋6 小时前
Docker Compose多容器编排与Nginx集群实战
运维·nginx·docker compose