Linux 服务管理
服务管理
在 Linux 系统中,“服务”(Service)指的是在后台运行的长期进程(Daemon),用于提供特定功能(如 Web 服务、数据库服务、网络服务等)。服务管理是 Linux 系统运维的核心任务之一,涉及服务的启动、停止、重启、状态查看及开机自启配置等。
Linux 服务管理的核心概念
服务与进程的关系:服务本质是 “后台进程”,通常以 d 结尾(如 httpd、sshd、mysqld),但并非绝对。
初始化系统(Init System):服务管理依赖于 “初始化系统”,它是 Linux 启动时第一个运行的进程(PID=1),负责管理所有后续进程(包括服务)。
现代 Linux 主流初始化系统有两种:
Systemd:当前最主流(Ubuntu 16.04+、CentOS 7+、Debian 9 + 等)。
系统管理器(systemd):系统启动时第一个运行的进程(PID=1),负责加载所有单元、启动服务、管理进程生命周期,是系统的 “总管”。
核心命令systemctl
systemctl 是 Systemd 的主命令,用于管理服务的全生命周期:
| 操作 | 命令 | 说明 |
|---|---|---|
| 启动服务 | systemctl start <服务名> | 立即启动指定服务(临时生效) |
| 停止服务 | systemctl stop <服务名> | 立即停止指定服务(临时生效) |
| 重启服务 | systemctl restart <服务名> | 先停止再启动(配置文件修改后需执行) |
| 重新加载配置 | systemctl reload <服务名> | 不停止服务,仅重新加载配置(推荐) |
| 查看服务状态 | systemctl status <服务名> | 显示运行状态、PID、日志等详细信息 |
| 开机自启(启用) | systemctl enable <服务名> | 配置服务在系统启动时自动运行 |
| 关闭开机自启(禁用) | systemctl disable <服务名> | 取消服务的开机自启 |
| 查看开机自启状态 | systemctl is-enabled <服务名> | 输出 enabled(启用)/disabled(禁用) |
| 列出所有服务 | systemctl list-units --type=service | 显示所有服务的状态(loaded/active 等) |
#停止服务
systemctl stop firewalld
#启动服务
systemctl start firewalld
#启动开机自启,--now 立即开启
systemctl enable --now firewalld
#启动开机不自启,--now
systemctl disable --now firewalld
#查看服务状态
systemctl status firewalld
服务配置文件(.service)
Systemd 通过 “单元文件” 定义服务的运行规则,文件位置:
- 系统默认服务:
/usr/lib/systemd/system/(不建议手动修改) - 自定义服务:
/etc/systemd/system/(用户添加的服务放在这里)
单元文件示例(以sshd.service为例)
文件内容分为 [Unit]、[Service]、[Install] 三个区块:
[root@kylin-shf ~]# cat /usr/lib/systemd/system/sshd.service [Unit]
Description=OpenSSH server daemon #服务描述(必选)
Documentation=man:sshd(8) man:sshd_config(5) # 文档地址(可选)
After=network.target sshd-keygen.target# 依赖关系
Wants=sshd-keygen.target# 弱依赖[Service]
Type=notify # 服务启动类型
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd-permitrootlogin
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY $PERMITROOTLOGIN
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.target
[Unit]区块参数
| 参数 | 类型 | 说明 |
|---|---|---|
After | 配置项 | 定义启动顺序(如 A After B 表示服务 A 在服务 B 之后启动),仅控制顺序,不强制依赖关系 |
Description | 字符串(必填) | 服务描述(必选) |
Documentation | 文档地址(可选) | 服务相关文档的 URL 或本地路径(如手册、官网) |
Requires | 依赖项 | 强依赖关系:若依赖的单元(如 network.target)启动失败,本服务也会启动失败 |
Wants | 依赖项 | 弱依赖关系:若依赖的单元启动失败,不影响本服务启动(推荐优先使用,降低耦合) |
[Service] 区块参数
| 参数 | 类型 / 取值 | 说明 |
|---|---|---|
Type | simple(默认) | ExecStart 命令启动的进程即为主进程,无需 fork 子进程,systemd 直接监控该进程 |
forking | 服务启动后会 fork 子进程(主进程退出),需配合 PIDFile 指定子进程 PID 文件(如 nginx、httpd) | |
oneshot | 一次性任务(如初始化脚本),执行完自动退出;需配合 RemainAfterExit=yes 保持 “active” 状态 | |
notify | 服务启动完成后通过 sd_notify() 函数通知 systemd(需程序支持) | |
ExecStart | 命令(绝对路径,必填) | 启动服务的命令(不可用相对路径,参数空格分隔) |
ExecStop | 命令(可选) | 停止服务的命令 |
ExecReload | 命令(可选) | 重新加载配置的命令(不停止服务,推荐优先使用) |
Environment | 环境变量键值对 | 为服务设置环境变量(多变量用空格分隔) |
KillMode=process | 停止服务时的进程终止模式: - process 表示 “仅杀死主进程”,由主进程自己处理子进程的终止(sshd 的子进程是为每个连接创建的,主进程终止时会自动清理子进程,适合这种 “主 - 子进程” 架构的服务) | |
Restart | no(默认) | 服务退出时不自动重启 |
on-failure | 非正常退出(退出码非 0、被信号终止等)时自动重启 | |
always | 无论退出原因(正常 / 非正常),始终自动重启(如 sshd 推荐使用) |
[Install] 区块(开机自启配置)
| 参数 | 类型 / 取值 | 说明 |
|---|---|---|
WantedBy | Target 列表(必填) | 服务被 systemctl enable 时,符号链接会被创建到指定 Target 的 wants/ 目录(弱依赖目标) |
RequiredBy | Target 列表 | 服务被 enable 时,链接到指定 Target 的 requires/ 目录(强依赖目标,较少用) |
Alias | 服务别名列表 | 服务的别名(可通过别名管理服务,如 systemctl start alias-name) |
Also | 单元列表 | 启用 / 禁用本服务时,同时启用 / 禁用指定单元(批量操 |
日志管理:journalctl 命令
systemd 内置日志系统(journal),统一管理所有服务和系统日志,通过 journalctl 命令查看:
| 命令 | 说明 |
|---|---|
journalctl -u <服务名> | 查看指定服务的日志(如 journalctl -u nginx) |
journalctl -u <服务名> -f | 实时跟踪服务日志(类似 tail -f) |
journalctl -u <服务名> --since "1h ago" | 查看 1 小时内的服务日志 |
journalctl -u <服务名> --no-pager | 直接输出日志(不分页,适合管道处理) |
journalctl -p err | 查看所有错误级别(err)的日志 |
示例:
#查看所有错误日志
[root@kylin-shf ~]# journalctl -p err
-- Logs begin at Tue 2025-09-09 14:50:38 CST, end at Tue 2025-09-09 15:26:47 CST. --
Sep 09 14:50:39 oldboy-kylin-v10 kernel: sd 2:0:0:0: [sda] Assuming drive cache: write through
Sep 09 14:50:41 kylin-shf kernel: piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!
Sep 09 14:50:41 kylin-shf systemd[1]: Failed to start Hardware Monitoring Sensors.
Sep 09 14:50:42 kylin-shf systemd[1]: Failed to start Crash recovery kernel arming.
localectl本地化管理
用于配置系统的本地化设置(语言、字符编码)和键盘布局
常用命令:
| 命令 | 说明 |
|---|---|
localectl | 查看当前本地化和键盘布局配置 |
localectl list-locales | 列出系统已生成的所有 locale(语言编码) |
localectl set-locale LANG=<locale> | 设置系统默认语言(如 zh_CN.UTF-8) |
示例:
#查看当前本地化配置
[root@kylin-shf ~]# localectlSystem Locale: LANG=zh_CN.UTF-8VC Keymap: cnX11 Layout: cn
# 设置系统默认语言为简体中文
localectl set-locale LANG=zh_CN.UTF-8
#设置系统默认语言为英文
localectl set-locale LANG=en_US.UTF-8语言配置文件
cat /etc/locale.conf
LANG="zh_CN.UTF-8"
面试题:Linux运行级别
| 运行级别 | 说明 |
|---|---|
| 0 | 关机模式 |
| 1 | rescue救援模式 |
| 2 | multi-user多用户级别,命令行模式,文本模式 |
| 3 | multi-user多用户级别,命令行模式,文本模式 |
| 4 | multi-user多用户级别,命令行模式,文本模式 |
| 5 | 图形化界面 |
| 6 | reboot 系统重启 |
面试题:Linux启动流程
-
按下电源
-
开机自检 (BIOS/UEFI)检查硬件是否有问题
-
引导加载(MBR/GRUB) 引导系统启动磁盘
-
GRUB菜单 可以选择进入什么模式
-
加载Linux内核 /boot/内核,加载到内存运行
-
内核初始化启动第一个进程systemd
-
读取运行级别,桌面模式,命令行模式
-
系统初始过程,网络,自动挂载,主机名
-
并行启动/usr/lib/systemd/system/ 服务
/etc/systemd/system
-
启动login显示登录界面
https://www.processon.com/view/link/68241642903228249e9b8f04?cid=682412dcb62fa61f2c5028e1
全流程图

总结
- 服务管理systemd
- 命令systemctl 管理服务
- systemctl配置文件
- localectl 修改语言
- 面试题Linux运行级别和Linux启动流程
