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
相关推荐
MaximusCoder2 小时前
等保测评命令——Anolis Linux
linux·运维·服务器·网络·经验分享·安全·php
田里的水稻2 小时前
ubuntu22.04_构建openclaw开发框架
运维·人工智能·python
zhojiew2 小时前
为agent实现渐进式Skills能力的思考和实践
linux·python·算法
相思难忘成疾3 小时前
《RHEL9虚拟机部署及SSH远程登录实践手册》
linux·运维·ssh·虚拟机
cg_ssh3 小时前
Vue3中样式变量的使用
linux·运维·服务器
TDengine (老段)3 小时前
TDengine IDMP 运维指南 —— 部署架构
大数据·运维·数据库·架构·时序数据库·tdengine·涛思数据
灰阳阳3 小时前
Docker镜像远程(离线)迁移教程
运维·docker·容器
balmtv3 小时前
Linux(CentOS)安装 MySQL
linux·mysql·centos
AC赳赳老秦4 小时前
DeepSeek优化多智能体指令:避免协同冲突,提升自动化流程稳定性
android·大数据·运维·人工智能·自然语言处理·自动化·deepseek