11.2. 使用 systemctl 管理系统服务
作为系统管理员,您可以使用 systemctl 工具管理系统服务。您可以执行各种任务,如启动、停止、重启运行的服务、启用和禁用服务以在引导时启动、列出可用的服务以及显示系统服务状态。
11.2.1. 列出系统服务 复制链接链接已复制到粘贴板!
您可以列出所有当前载入的服务单元,并显示所有可用服务单元的状态。
流程
使用 systemctl 命令执行以下任何一个任务:
列出所有当前载入的服务单元:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,
systemctl list-units命令只显示活跃的单位。对于每个服务单元文件,命令提供以下参数的概述:UNIT- 服务单元的全名
LOAD- 配置文件的载入状态
ACTIVE或SUB- 当前高级别和低级别单元文件激活状态
DESCRIPTION- 单元目的和功能的简短描述
使用以下带有
--all或-a命令行选项的命令,列出 所有载入的单元,而不考虑其状态:systemctl list-units --type service --all
$ systemctl list-units --type service --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 列出所有可用服务单元的状态(enabled 或 disabled):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于每个服务单元,这个命令会显示:
UNIT FILE- 服务单元的全名
STATE- 服务单元是否已启用或禁用,以便在引导时自动启动的信息
11.2.2. 显示系统服务状态 复制链接链接已复制到粘贴板!
您可以检查任何服务单元以获取详细信息,并验证该服务的状态,无论是否启用了以便在引导期间启动还是当前正在运行。您还可以查看在特定的服务单元之后或之前启动的服务。
流程
显示与系统服务对应的服务单元的详细信息:
systemctl status <name>.service
$ systemctl status <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>替换为您要检查的服务单元的名称(例如:gdm)。这个命令显示以下信息:
- 所选服务单元的名称,后跟一个简短描述
- 可用服务单元信息中 描述的一个或多个字段
-
服务单元的执行:如果单元由
root用户执行 最新的日志条目
Expand 表 11.2. 可用的服务单元信息 项 描述 Loaded是否服务单元已载入的信息、到单元文件的绝对路径,以及是否已启用该单元以便在引导时启动。
Active服务单元是否在运行的信息,后面有一个时间戳。
Main PID进程 ID 和相应的系统服务的名称。
Status相关系统服务的额外信息。
Process有关相关进程的附加信息。
CGroup有关相关控制组(
cgroups)的更多信息。
验证特定的服务单元是否正在运行:
systemctl is-active <name>.service
$ systemctl is-active <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确定是否已启用了特定的服务单元以便在引导时启动:
systemctl is-enabled <name>.service
$ systemctl is-enabled <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果指定的服务单元正在运行或已启用,则
systemctl is-active和systemctl is-enabled命令都会返回退出状态0。检查在指定的服务单元之前,
systemd命令哪些服务启动systemctl list-dependencies --after <name>.service
# systemctl list-dependencies --after <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,要查看在
gdm之前启动的服务的列表,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查在指定的服务单元之后,
systemd命令哪些服务启动:systemctl list-dependencies --before <name>.service
# systemctl list-dependencies --before <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,要查看在
gdm后systemd要启动的服务的列表,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.2.3. 启动和停止 systemd 单元 复制链接链接已复制到粘贴板!
您可以使用 systemctl start 命令在当前会话中启动系统服务。
先决条件
- 您有 Root 访问权限。
流程
在当前会话中启动一个系统服务:
*systemctl start <systemd_unit> *
# *systemctl start <systemd_unit> *Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <
systemd_unit> 替换为您要启动的服务单元的名称(例如httpd.service)。注意在
systemd中,服务之间存在正和负的依赖项。启动一个特定的服务可能需要启动一个或多个其他服务(正依赖项)或停止一个或多个服务(负依赖项)。当您试图启动新服务时,
systemd会自动解析所有依赖项,而不会向用户明确通知。这意味着,如果您已运行了一个服务,并且您尝试使用负依赖项启动另一个服务,则第一个服务会自动停止。例如,如果您正在运行
sendmail服务,并且您试图启动postfix服务,systemd首先自动停止sendmail,因为这些服务会冲突,且无法在同一端口上运行。
11.2.4. 停止一个系统服务 复制链接链接已复制到粘贴板!
如果要在当前会话中停止系统服务,请使用 systemctl stop 命令。
先决条件
- 根访问权限
流程
停止一个系统服务:
systemctl stop <name>.service
# systemctl stop <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>替换为您要停止的服务单元的名称(例如:bluetooth)。
11.2.5. 重启并重新加载一个系统服务 复制链接链接已复制到粘贴板!
您可以使用 restart 命令在当前会话中重启系统服务,以执行以下操作:
- 在当前会话中停止所选的服务单元,并立即再次启动它。
- 仅在对应的服务已在运行时才重启服务单元。
- 重新加载系统服务的配置,而不中断其执行。
先决条件
- 您有 Root 访问权限。
流程
重启一个系统服务:
systemctl restart <name>.service
# systemctl restart <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要重启的服务单元的名称替换
<name>(例如httpd)。如果所选服务单元没有运行,这个命令会启动它。
仅在相应的服务已在运行时重启服务单元:
systemctl try-restart <name>.service
# systemctl try-restart <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入配置而不中断服务执行:
systemctl reload <name>.service
# systemctl reload <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不支持此功能的系统服务忽略此命令。要重启这些服务,请使用
reload-or-restart和reload-or-try-restart命令。
11.2.6. 启用一个系统服务,以便在引导时启动 复制链接链接已复制到粘贴板!
您可以启用一个服务以便在引导时自动启动,这些更改将在下次重启时应用。
先决条件
- 您有 Root 访问权限。
流程
验证单元是否已屏蔽:
systemctl status <systemd_unit>
# systemctl status <systemd_unit>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果这个单元被屏蔽,请首先取消屏蔽它:
systemctl unmask <systemd_unit>
# systemctl unmask <systemd_unit>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在引导时启用服务:
systemctl enable <systemd_unit>
# systemctl enable <systemd_unit>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <
;systemd_unit> 替换为您要启用的服务单元的名称(例如httpd)。
(可选)将 现在 选项传给命令,以便立即启动该单元。
11.2.7. 禁用一个系统服务在引导时启动 复制链接链接已复制到粘贴板!
您可以防止服务单元在引导时自动启动。如果您禁用某个服务,它不会在引导时启动,但可以手动启动。您还可以屏蔽服务,使其无法手动启动。屏蔽是一种禁用服务的方法,使该服务能够永久不可用,直到再次屏蔽该服务。
先决条件
- 您有 Root 访问权限。
流程
禁用要在引导时启动的服务:
systemctl disable <name>.service
# systemctl disable <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>替换为您要禁用的服务单元的名称(例如:bluetooth)。(可选)传递-now命令,以便在服务当前正在运行时同时停止该服务。可选: 要防止单元被管理员意外启动,或者作为其他单元的依赖项,请屏蔽该服务:
systemctl mask <name>.service
# systemctl mask <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow