8. systemctl 命令
服务
服务(Service)是指一类在后台持续运行的程序(守护进程,Daemon),通常用于提供系统或网络功能。如:Web服务(nginx 等)、远程控制(ssh、ftpd等)、数据库(mysqld等)、日志管理等。服务通常在系统启动时自动运行,无需用户交互,并通过特定方式(如命令行或系统工具)进行管理。
服务由 Linux 的初始化系统管理,Ubuntu 24.04 使用 systemd 对服务进行管理。
systemctl 命令
systemctl 命令是最新 Linux 系统中用于 查询 和 发送控制命令 的系统管理工具命令。
主要功能
- 查询服务的状态。
- 管理系统服务:启动、停止、重启服务等。
单元
单元(UNIT)是 systemd 管理系统资源的基本单位,代表系统中被 systemd 管理的各种实体(如服务、设备、挂载点等)。每个单元对应一个配置文件,定义了资源的属性、依赖关系和行为。
为了演示服务的用法。我们需要运行 sudo apt install openssh-server 命令安装一个 ssh 服务。
ssh 是用于 Linux 或 UNIX 操作系统中用于接收远程连接的服务。安装了这个服务后,远程计算机可以在终端中使用 ssh 命令远程连接这个计算机。这个服务是运维和开发人员常用的服务。完成本课程的实验后,你可以使用 sudo systemctl stop ssh.service 命令来关闭 ssh.service 服务来保证系统的安全。
安装命令如下:
weimingze@mzstudio:~$ sudo apt install openssh-server
如果你使用的是本教材提供的 Ubuntu24.04LTS_IntelX86CPU.zip 虚拟机镜像则无需安装(已经安装过了)。
命令格式
systemctl [选项] [参数]
如:
列出所有的单元。
weimingze@mzstudio:~$ systemctl
UNIT LOAD ACTIVE SUB DESCRIPTION
sys-module-configfs.device loaded active plugged /sys/module/configfs
sys-module-fuse.device loaded active plugged /sys/module/fuse
run-snapd-ns.mount loaded active mounted /run/snapd/ns
run-user-1000-doc.mount loaded active mounted /run/user/1000/doc
NetworkManager.service loaded active running Network Manager
openvpn.service loaded active exited OpenVPN service
rsyslog.service loaded active running System Logging Service
setvtrgb.service loaded active exited Set console scheme
ssh.service loaded active running OpenBSD Secure Shell
这里列出的所有 活动 单元(UNIT),如 ssh 服务的 单元(UNIT)是 ssh.service。
每列具体内容如下:
- UNIT:单元名称(如服务:
.service、挂载点.mount、套接字.socket、设备.device等)。 - LOAD:单元加载状态(loaded 表示已加载、error:配置有错误、masked:单元被禁用)。
- ACTIVE:单元的高层级状态(如 active 运行中,inactive 未运行,failed 尝试启动但失败)。
- SUB:更详细的子状态(如 running 表示服务正在运行,exited 表示已退出)。
- 服务(.service):running(运行中)、exited(已退出)、dead(未运行)。
- 挂载点(.mount):mounted(已挂载)、waiting(等待挂载)。
- 设备(.device): plugged(设备插入)、listening(套接字监听)等。
- DESCRIPTION:单元的简要描述。
单元状态查询命令和选项
systemctl 或 systemctl list-unitssystemctl list-units --allsystemctl list-units -t <类型名>service, mount, socket)。systemctl status <UNIT>ssh.service)。systemctl is-active <UNIT>active/inactive)。systemctl --failed如:
查询 ssh.service 的服务状态(单元名可以使用 ssh.service、也可以是 ssh ):
weimingze@mzstudio:~$ systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/usr/lib/systemd/system/ssh.service; disabled; preset: enabled)
Active: active (running) since Sun 2025-05-25 09:28:12 CST; 6h ago
TriggeredBy: ● ssh.socket
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1880 (sshd)
Tasks: 1 (limit: 4551)
Memory: 4.1M (peak: 5.1M)
CPU: 513ms
CGroup: /system.slice/ssh.service
└─1880 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
...
可见守护进程已经运行(running),PID 是 1880,单元配置文件是 /usr/lib/systemd/system/ssh.service。
生命周期管理命令和选项
systemctl start <UNIT>systemctl stop <UNIT>systemctl restart <UNIT>systemctl reload <UNIT>systemctl reload-or-restart <UNIT>systemctl kill <UNIT>-s <信号值> 指定信号)。如:
weimingze@mzstudio:~$ sudo systemctl stop ssh.service
weimingze@mzstudio:~$ sudo systemctl start ssh.service
weimingze@mzstudio:~$ sudo systemctl restart ssh.service
weimingze@mzstudio:~$ sudo systemctl kill ssh.service
weimingze@mzstudio:~$ sudo systemctl reload ssh.service
weimingze@mzstudio:~$ sudo systemctl restart ssh.service
开机自启管理
systemctl enable <UNIT>systemctl disable <UNIT>systemctl is-enabled <UNIT>enabled/disabled)。systemctl mask <UNIT>/dev/null,防止手动或依赖启动)。systemctl unmask <UNIT>练习:
- 使用
sudo apt install openssh-server安装ssd服务。 - 使用
systemctl list-units -t service命令查看所有服务,看一是是否有ssh.service这个服务。 - 使用
sudo systemctl start ssh.service来启动ssh服务。 - 使用
sudo systemctl stop ssh.service来停止ssh服务。 - 使用
sudo systemctl restart ssh.service来重新开始ssh服务。 - 使用
sudo systemctl stop ssh.service来停止ssh服务。