8. systemctl 命令

服务

服务(Service)是指一类在后台持续运行的程序(守护进程,Daemon),通常用于提供系统或网络功能。如:Web服务(nginx 等)、远程控制(ssh、ftpd等)、数据库(mysqld等)、日志管理等。服务通常在系统启动时自动运行,无需用户交互,并通过特定方式(如命令行或系统工具)进行管理。

服务由 Linux 的初始化系统管理,Ubuntu 24.04 使用 systemd 对服务进行管理。

systemctl 命令

systemctl 命令是最新 Linux 系统中用于 查询发送控制命令 的系统管理工具命令。

主要功能

  1. 查询服务的状态。
  2. 管理系统服务:启动、停止、重启服务等。

单元

单元(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

每列具体内容如下:

单元状态查询命令和选项

命令和选项
说明
systemctlsystemctl list-units
列出所有 活动 的单元(默认过滤掉未运行的)。
systemctl list-units --all
列出 所有单元(包括未运行的)。
systemctl 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>
尝试 reload,失败则 restart。
systemctl kill <UNIT>
强制终止单元(默认发送 SIGTERM,可用 -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>
取消禁用。

练习:

  1. 使用 sudo apt install openssh-server 安装 ssd 服务。
  2. 使用 systemctl list-units -t service 命令查看所有服务,看一是是否有 ssh.service这个服务。
  3. 使用 sudo systemctl start ssh.service 来启动 ssh 服务。
  4. 使用 sudo systemctl stop ssh.service 来停止 ssh 服务。
  5. 使用 sudo systemctl restart ssh.service 来重新开始 ssh 服务。
  6. 使用 sudo systemctl stop ssh.service 来停止 ssh 服务。