systmctl的作用,使用场景和用法
好的,我们来详细介绍一下 systemctl
,它是现代 Linux 系统中一个极其重要和强大的命令。
零. 作者常用的systemctl命令
- linux图形化界面由于某些原因意外卡死的时候,使用
Ctrl
+Alt
+F3
进入虚拟控制台,然后使用systemctl restart gdm来直接重启桌面系统 - systemctl status gdm可以监控现在某一个system进程的状态
一. systemctl
是什么?它的作用是什么?
systemctl
是 systemd
的主控制命令。要理解 systemctl
,你必须先了解 systemd
。
-
systemd
:是目前绝大多数主流 Linux 发行版(如 CentOS 7+, Ubuntu 15.04+, Debian 8+, Fedora等)使用的系统和服务管理器。它取代了传统的 SysVinit 和 Upstart,成为系统的第一个进程(PID=1),负责启动系统、管理系统进程和各种服务。 -
systemctl
的作用:systemctl
就是你与systemd
交互的命令行工具。你可以用它来:- 管理服务(Service):启动、停止、重启、重载、查看服务状态。
- 控制开机启动项:设置某个服务是否在开机时自动运行。
- 查看系统状态:检查正在运行的服务、失败的服务等。
- 管理系统运行级别(Target):切换系统模式,如切换到图形界面或命令行模式。
- 查看日志:通过与
journalctl
结合,方便地查看特定服务的日志,用于排错。 - 控制系统电源:如重启、关机、待机等。
简单来说,在现代 Linux 系统上,所有关于服务管理和系统启动的操作,基本都离不开 systemctl
。它统一了之前分散的 service
、chkconfig
、init
、shutdown
等命令的功能。
二、systemctl
的主要使用场景
systemctl
几乎是你作为 Linux 系统管理员或开发者每天都会用到的工具。以下是一些典型的使用场景:
-
部署和管理应用
- 场景:你刚刚在服务器上安装了 Nginx 网站服务器。
- 操作:
- 启动 Nginx:
sudo systemctl start nginx
- 检查 Nginx 是否成功运行:
sudo systemctl status nginx
- 设置 Nginx 开机自启:
sudo systemctl enable nginx
- 修改了 Nginx 配置后,重新加载配置:
sudo systemctl reload nginx
- 如果需要彻底重启服务:
sudo systemctl restart nginx
- 启动 Nginx:
-
系统故障排查
- 场景:网站无法访问,怀疑是后端数据库(如 MySQL)服务挂了。
- 操作:
- 立即检查 MySQL 服务状态:
sudo systemctl status mysqld
- 从状态信息中,你可以看到服务是否
active (running)
,以及最近几条日志。 - 如果服务失败(
failed
),你可以使用journalctl -u mysqld
查看详细的错误日志,定位问题原因。
- 立即检查 MySQL 服务状态:
-
系统维护和更新
- 场景:需要进行系统内核更新或重要维护,要求重启服务器。
- 操作:
- 安全地重启系统:
sudo systemctl reboot
- 维护完成后需要关机:
sudo systemctl poweroff
- 安全地重启系统:
-
切换系统运行模式
- 场景:服务器默认启动到图形界面,但你作为管理员,希望它只启动到命令行模式以节省资源。
- 操作:
- 查看当前默认模式:
systemctl get-default
(可能会显示graphical.target
) - 将默认模式设置为命令行:
sudo systemctl set-default multi-user.target
- 查看当前默认模式:
三、systemctl
的常用命令和用法
systemd
管理的对象被称为 单元(Unit)。单元有多种类型,最常见的是服务单元(.service
),其他还有套接字(.socket
)、挂载点(.mount
)、目标(.target
)等。在使用 systemctl
时,如果省略单元类型,它默认会认为是 .service
。
例如,systemctl start nginx
和 systemctl start nginx.service
是等效的。
1. 服务管理 (Management of Services)
这是最核心的用法。以 nginx
服务为例:
命令 | 作用 | 示例 |
---|---|---|
start | 启动一个服务 | sudo systemctl start nginx |
stop | 停止一个服务 | sudo systemctl stop nginx |
restart | 重启一个服务(先停止后启动) | sudo systemctl restart nginx |
reload | 重载服务配置(不中断服务) | sudo systemctl reload nginx |
status | 查看服务的详细状态 | systemctl status nginx |
enable | 设置服务开机自启 | sudo systemctl enable nginx |
disable | 取消服务开机自启 | sudo systemctl disable nginx |
is-active | 检查服务当前是否正在运行 | systemctl is-active nginx |
is-enabled | 检查服务是否设置为开机自启 | systemctl is-enabled nginx |
mask | "屏蔽"一个服务,使其无法被启动 | sudo systemctl mask nginx |
unmask | 取消屏蔽 | sudo systemctl unmask nginx |
status
命令的输出解读:
systemctl status nginx
的输出信息非常丰富,包含了:
- Loaded: 服务的单元文件路径和状态(是否启用)。
- Active: 服务的运行状态,如
active (running)
、inactive (dead)
或failed
。 - Main PID: 服务主进程的 PID。
- Tasks: 服务占用的总进程数。
- Memory: 服务占用的内存。
- CGroup: 相关的控制组信息。
- Logs: 最近的几条日志记录,非常便于快速排错。
2. 系统状态查看 (Inspecting System State)
命令 | 作用 | 示例 |
---|---|---|
list-units | 列出当前正在运行的、活动的单元 | systemctl list-units |
list-units --all | 列出所有单元,包括非活动的 | systemctl list-units --all |
list-units --type=service | 只列出服务类型的单元 | systemctl list-units --type=service |
list-unit-files | 列出所有已安装的单元文件及其状态 | systemctl list-unit-files |
list-dependencies | 列出单元的依赖关系 | systemctl list-dependencies nginx.service |
3. 系统运行级别/目标管理 (Target Management)
target
是一组单元的集合,类似于旧系统中的“运行级别”。
命令 | 作用 | 示例 |
---|---|---|
get-default | 获取默认的启动目标 | systemctl get-default |
set-default | 设置默认的启动目标 | sudo systemctl set-default graphical.target |
isolate | 切换到指定目标(不重启) | sudo systemctl isolate multi-user.target |
常见的 Targets:
multi-user.target
: 命令行模式(类似运行级别 3)。graphical.target
: 图形用户界面模式(类似运行级别 5)。reboot.target
: 重启。poweroff.target
: 关机。
4. 日志管理 (Log Management via journalctl
)
systemctl
与 systemd
的日志系统 journald
紧密集成,通过 journalctl
命令访问。
命令 | 作用 | 示例 |
---|---|---|
journalctl -u [service] | 查看指定服务的所有日志 | journalctl -u nginx.service |
journalctl -u [service] -f | 实时跟踪指定服务的日志(类似 tail -f ) | journalctl -u nginx.service -f |
journalctl -n [num] | 查看最近的 N 条日志 | journalctl -n 50 |
journalctl --since "time" | 查看某个时间点之后的日志 | journalctl --since "2023-10-27 10:00:00" |
5. 系统电源管理 (System Power Control)
命令 | 作用 |
---|---|
systemctl reboot | 重启系统 |
systemctl poweroff | 关闭系统(断电) |
systemctl halt | 挂起系统(不断电) |
systemctl suspend | 系统待机(内存供电) |
systemctl hibernate | 系统休眠(数据存入硬盘) |
总结
systemctl
是现代 Linux 系统管理的核心。它用一套统一、强大且一致的命令,取代了过去零散的工具链,使得服务管理、系统启动控制和故障排查变得更加高效和透明。掌握 systemctl
是每一位 Linux 用户和管理员的必备技能。