网宝
新闻中心 / / 正文

Linux 服务管理(systemd)基础用法

2026-02-01 17:04
技术部
← 返回

在现代 Linux 系统中(2015 年之后几乎所有主流发行版),systemd 已经完全取代了传统的 SysV init 和 Upstart,成为默认的 PID 1(系统初始化进程)和服务管理器。

理解 systemd 的服务管理方式,是 Linux 服务器运维最核心的基础技能之一。本文聚焦最常用、最实操的用法,帮助新手快速上手。

1. 核心概念速览(必须记住的几个名词)

 
 
概念 含义 常见文件后缀 类比(旧时代)
Unit systemd 管理的最小单位(服务、挂载、定时器、socket 等) .service .timer .socket .target .mount 等
Service 最常见的一种 Unit,代表一个后台进程/守护进程 .service 旧的 /etc/init.d/xxx
Target 一组 Unit 的集合,类似“启动级别” .target runlevel 3/5
systemctl systemd 的主要命令行工具,几乎所有操作都通过它完成 service / chkconfig
journalctl 查看 systemd 管理的服务的日志(取代 /var/log/messages 等部分功能) tail -f /var/log/xxx
 

最常用的目标(target):

  • multi-user.target → 命令行多用户模式(服务器默认)
  • graphical.target → 带图形界面的多用户模式(桌面默认)

2. 最常用 systemctl 命令一览表

 
 
操作类型 命令示例 说明
查看状态 systemctl status nginx 显示服务当前状态、PID、主进程、最近日志
启动服务 systemctl start nginx 立即启动(不影响开机自启)
停止服务 systemctl stop nginx 立即停止
重启服务 systemctl restart nginx 停止 → 启动
重新加载配置 systemctl reload nginx 不中断服务,重新读配置(nginx 支持)
设置开机自启 systemctl enable nginx 创建符号链接到 multi-user.target.wants/
取消开机自启 systemctl disable nginx 删除符号链接
一次性启动 systemctl start nginx --now 启动 + 同时 enable
查看所有服务 systemctl list-units --type=service 当前加载的服务
查看已安装服务 systemctl list-unit-files --type=service 看哪些服务是 enabled / disabled
查看失败的服务 systemctl --failed 快速定位启动失败的服务
查看依赖关系 systemctl list-dependencies nginx 看 nginx 依赖哪些 target 和服务
 

3. 服务状态解读(status 命令输出重点看哪里)

执行 systemctl status nginx 后,最重要的几行信息:

text
 
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2026-02-10 14:30:22 PST; 3h ago
 Main PID: 1234 (nginx)
    Tasks: 5 (limit: 4915)
   Memory: 28.4M
      CPU: 1.203s
   CGroup: /system.slice/nginx.service
           ├─1234 nginx: master process /usr/sbin/nginx
           └─1235 nginx: worker process
 
 

关键字段含义:

  • Loaded:是否加载成功;enabled 表示开机自启
  • Active:状态(active(running)、inactive(dead)、failed、activating、deactivating)
  • Main PID:主进程 PID
  • Memory / CPU:当前资源占用(方便快速判断是否泄漏)
  • CGroup:systemd 的控制组路径(后续可用于资源限制)

4. 日志查看(journalctl 与服务管理强绑定)

systemd 把所有服务的标准输出/错误都收集到 journald 中。

最常用组合:

  • 实时跟踪某个服务日志 journalctl -u nginx -f
  • 查看最近 200 行 journalctl -u nginx -n 200
  • 只看错误及以上级别 journalctl -u nginx -p err -b(-b 表示本次启动以来)
  • 查看启动时的详细过程 journalctl -b -u nginx
  • 看某个时间段 journalctl -u nginx --since "2026-02-10 18:00" --until "2026-02-10 19:00"

5. 常见服务管理场景实战示例

场景 1:新装 nginx,想让它开机自启并立即启动

Bash
 
sudo systemctl enable --now nginx
# 等价于
sudo systemctl enable nginx
sudo systemctl start nginx
 
 

场景 2:修改了配置文件,想让服务重新加载配置而不中断连接

Bash
 
sudo systemctl reload nginx
# 如果服务不支持 reload,就只能 restart
 
 

场景 3:服务启动失败,想知道为什么

Bash
 
systemctl status nginx          # 先看 Active: failed 那一行
journalctl -u nginx -xe         # -xe 显示最近日志并解释错误码
 
 

场景 4:想临时禁止某个服务开机启动,但不影响当前运行

Bash
 
sudo systemctl mask nginx       # 屏蔽(连 start 命令都会失败)
# 恢复
sudo systemctl unmask nginx
 
 

场景 5:查看系统启动时哪个服务最耗时

Bash
 
systemd-analyze blame | head -15
 
 

6. 新手常见误区与正确认知

误区 1:以为 service nginx restart 还能用 → 大部分现代系统已废弃 service 命令,强制使用 systemctl

误区 2:直接 kill -9 主进程来“重启”服务 → 会导致 systemd 认为服务异常退出,可能触发重启策略或标记 failed

误区 3:配置文件改了却不起作用 → 改的是 /etc/nginx/nginx.conf,但没执行 reload/restart

正确做法总结口诀:

  • 改配置 → reload(优雅)或 restart(强制)
  • 想开机跑 → enable(或 enable --now)
  • 查问题 → status + journalctl -u -xe
  • 启动慢 → systemd-analyze blame / critical-chain

 

掌握以上内容后,你已经能处理 90% 的日常服务管理任务(启动、停止、重启、日志查看、开机自启、故障定位)。后续可以深入的方向包括:编写/修改 .service 文件、理解 drop-in 覆盖机制、使用 systemd timer 替代 crontab、cgroup v2 资源限制、socket 激活等高级特性。

QQ客服 提交工单