跳转到内容

systemctl 入门

systemd 是 CentOS 7 以来所有 EL 系统(包括 AlmaLinux、Rocky Linux)默认的初始化系统和服务管理器。它取代了传统的 SysVinit,负责引导系统、管理服务、挂载文件系统等核心任务。systemctl 是与 systemd 交互的主要命令行工具。

systemd 以 单元(Unit) 为核心概念来管理系统资源。常见的单元类型包括:

单元类型后缀说明
Service.service系统服务(如 Nginx、sshd)
Socket.socket进程间通信套接字
Target.target一组单元的集合,类似运行级别
Timer.timer定时触发任务
Mount.mount文件系统挂载点

systemd 的单元配置文件通常存放在以下位置:

  • /usr/lib/systemd/system/ — 由软件包安装的单元文件
  • /etc/systemd/system/ — 管理员自定义或覆盖的单元文件(优先级更高)
启动 Nginx 服务
sudo systemctl start nginx
停止 Nginx 服务
sudo systemctl stop nginx

重启会先停止再启动服务,适用于配置变更后需要完全重载的场景:

重启 Nginx 服务
sudo systemctl restart nginx

部分服务支持在不中断运行的情况下重新加载配置文件:

重新加载 Nginx 配置(不中断服务)
sudo systemctl reload nginx

如果你不确定服务是否支持 reload,可以使用 reload-or-restart,它会优先尝试 reload,失败时回退为 restart:

尝试 reload,不支持则 restart
sudo systemctl reload-or-restart nginx

status 子命令可以显示服务的运行状态、PID、内存占用以及最近的日志输出:

查看 Nginx 服务状态
sudo systemctl status nginx

输出示例:

● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Tue 2026-03-24 10:15:30 CST; 2h ago
Main PID: 1234 (nginx)
Tasks: 3 (limit: 23456)
Memory: 5.2M
CPU: 35ms
CGroup: /system.slice/nginx.service
├─1234 "nginx: master process /usr/sbin/nginx"
└─1235 "nginx: worker process"

你也可以使用以下命令快速判断服务状态:

检查服务是否正在运行
systemctl is-active nginx
检查服务是否已启用开机自启
systemctl is-enabled nginx
检查服务是否启动失败
systemctl is-failed nginx
将 Nginx 设置为开机自动启动
sudo systemctl enable nginx

这会在 /etc/systemd/system/ 下创建符号链接,让服务在系统启动时自动运行。

如果想同时启用并立即启动服务,可以加 --now 参数:

启用开机自启并立即启动
sudo systemctl enable --now nginx
取消 Nginx 开机自启
sudo systemctl disable nginx

同样支持 --now 来同时停止服务:

取消开机自启并立即停止
sudo systemctl disable --now nginx
列出所有活动的 service 单元
systemctl list-units --type=service

列出所有已安装的服务(含未启动的)

Section titled “列出所有已安装的服务(含未启动的)”
列出所有已安装的 service 单元文件
systemctl list-unit-files --type=service
查看所有启动失败的单元
systemctl --failed
查看 Nginx 的依赖树
systemctl list-dependencies nginx

systemd 通过 journald 收集所有服务日志。你可以用 journalctl 快速查看某个服务的日志输出:

查看 Nginx 服务的全部日志
sudo journalctl -u nginx
实时跟踪 Nginx 日志输出
sudo journalctl -u nginx -f
查看本次启动以来 Nginx 的日志
sudo journalctl -u nginx -b

更多 journalctl 的高级用法请参阅 Journal 日志 章节。

systemd 使用 target 来代替传统的运行级别。常见目标及其对应关系:

Target传统运行级别说明
poweroff.target0关机
rescue.target1单用户/救援模式
multi-user.target3多用户命令行模式
graphical.target5图形界面模式
reboot.target6重启
查看当前默认启动目标
systemctl get-default
将默认启动目标设为多用户命令行模式
sudo systemctl set-default multi-user.target
临时切换到救援模式(不改变默认目标)
sudo systemctl isolate rescue.target
操作命令
启动服务sudo systemctl start <服务名>
停止服务sudo systemctl stop <服务名>
重启服务sudo systemctl restart <服务名>
查看状态sudo systemctl status <服务名>
开机自启sudo systemctl enable <服务名>
取消自启sudo systemctl disable <服务名>
启用并启动sudo systemctl enable --now <服务名>
列出所有服务systemctl list-units --type=service
查看失败单元systemctl --failed
查看服务日志sudo journalctl -u <服务名>