10.2. 使用 systemctl 管理系统服务
作为系统管理员,您可以使用 systemctl
工具管理系统服务。您可以执行各种任务,如启动、停止、重启运行的服务、启用和禁用服务以在引导时启动、列出可用的服务以及显示系统服务状态。
10.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 --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出所有可用服务单元的状态( enabled 或 disabled):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于每个服务单元,这个命令会显示:
UNIT FILE
- 服务单元的全名
STATE
- 服务单元是否已启用或禁用,以便在引导时自动启动的的信息
10.2.2. 显示系统服务状态 复制链接链接已复制到粘贴板!
您可以检查任何服务单元以获取详细信息,并验证服务的状态,其是否已启用为在引导时启动还是当前正在运行。您还可以查看在特定的服务单元之后或之前启动的服务。
流程
显示与系统服务相应的服务单元的详细信息:
systemctl status <name>.service
$ systemctl status <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>
替换为您要检查的服务单元的名称(例如:gdm
)。这个命令显示以下信息:
- 所选服务单元的名称,后跟一个简短描述
- 可用服务单元信息中 中描述的一个或多个字段
-
服务单元的执行:如果单元由
root
用户执行 最新的日志条目
Expand 表 10.2. 可用的服务单元信息 项 描述 Loaded
是否服务单元已载入的信息,单元文件的绝对路径,以及是否在引导时启动该单元的说明。
Active
服务单元是否在运行的信息,后面有一个时间戳。
Main PID
进程 ID 和相应系统服务的名称。
Status
相关系统服务的额外信息。
Process
有关相关进程的附加信息。
CGroup
有关相关的控制组(
cgroups
)的额外信息。
验证特定的服务单元是否正在运行:
systemctl is-active <name>.service
$ systemctl is-active <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定是否在引导时启用了特定的服务单元:
systemctl is-enabled <name>.service
$ systemctl is-enabled <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果指定的服务单元正在运行或已启用,则
systemctl is-active
和systemctl is-enabled
命令都会返回0
退出状态 0。检查在指定服务单元前
systemd
启动哪些服务systemctl list-dependencies --after <name>.service
# systemctl list-dependencies --after <name>.service
Copy 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>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,要查看在
gdm
后systemd
启动的服务列表,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.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
,因为这些服务会冲突,且无法在同一端口上运行。
10.2.4. 停止一个系统服务 复制链接链接已复制到粘贴板!
如果要在当前会话中停止系统服务,请使用 systemctl stop
命令。
先决条件
- 根访问权限
流程
停止一个系统服务:
systemctl stop <name>.service
# systemctl stop <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>
替换为您要停止的服务单元的名称(例如:bluetooth
)。
10.2.5. 重启并重新加载一个系统服务 复制链接链接已复制到粘贴板!
您可以使用 restart
命令在当前会话中重启系统服务,以执行以下操作:
- 在当前会话中停止所选服务单元,并立即再次启动它。
- 仅在相应的服务已在运行时重启服务单元。
- 重新加载系统服务的配置,而不中断其执行。
先决条件
- 您有 Root 访问权限。
流程
重启一个系统服务:
systemctl restart <name>.service
# systemctl restart <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要重启的服务单元的名称替换
<name>
(例如httpd
)。如果所选服务单元没有运行,这个命令会启动它。
仅在相应的服务已在运行时重启服务单元:
systemctl try-restart <name>.service
# systemctl try-restart <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入配置而不中断服务执行:
systemctl reload <name>.service
# systemctl reload <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不支持此功能的系统服务忽略此命令。要重新启动这些服务,请改为使用
reload-or-restart
和reload-or-try-restart
命令。
10.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
)。
(可选)将 现在
选项传给命令,以便立即启动该单元。
10.2.7. 禁止一个系统服务在引导时启动 复制链接链接已复制到粘贴板!
您可以防止服务单元在引导时自动启动。如果您禁用某个服务,它不会在引导时启动,但可以手动启动。您还可以屏蔽服务,使其无法手动启动。屏蔽是一种禁用服务的方法,使该服务能够永久不可用,直到再次屏蔽该服务。
先决条件
- 您有 Root 访问权限。
流程
禁用要在引导时启动的服务:
systemctl disable <name>.service
# systemctl disable <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>
替换为您要禁用的服务单元的名称(例如:bluetooth
)。(可选)传递-now
命令,以便在服务当前正在运行时同时停止该服务。可选:要防止这个单元被管理员意外启动,或者作为其它单元的依赖项启动,请屏蔽该服务:
systemctl mask <name>.service
# systemctl mask <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow