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
相关推荐
方便面不加香菜5 分钟前
Linux--基础IO(一)
linux·运维·服务器
鼎讯信通2 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
三十..3 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
跨境数据猎手4 小时前
大数据在电商行业的应用
大数据·运维·爬虫
linyanRPA4 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
mounter6254 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
会Tk矩阵群控的小木4 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
赵渝强老师5 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
佛山个人技术开发5 小时前
GitCode SSH连接配置教程
运维·ssh·gitcode
Qt程序员5 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu