这 12 个 systemctl 命令将让你控制 Linux systemd 服务
快速链接
- systemctl 命令是什么?
- 使用 systemctl 询问服务
- 使用 systemctl 控制服务
- 您的服务工具包
systemctl 命令有一些经常被忽视的功能。除了启动和停止 Linux 服务之外,您还可以列出已安装的服务,并检查它们所处的状态。以下是快速浏览。
systemctl 命令是什么?
systemctl 命令是 systemd init 系统的中央管理工具,最出名的可能是用于启动和停止服务的工具。但它的意义远不止于此,它的手册页长度超过 1600 行就证明了这一点。
因为 systemctl 是一个管理工具,而不仅仅是一个服务启动器,所以您可以使用它来访问有关 systemd 系统和服务的有用信息。
大多数 Linux 发行版都采用了 systemd,但有些发行版选择保留传统的 SystemV init 系统。如果您不确定您的发行版使用哪种方案,那么很容易找出答案。我们将使用 stat 命令来查看 init 文件。
stat /sbin/init
可执行文件 /sbin/init 是在基于 SystemV 的发行版中启动的第一个进程。在基于 systemd 的发行版上,具有该名称的符号链接指向 systemd 文件。
第一行输出向我们显示,在这台 Ubuntu 测试机上,/sbin/init 是 /lib/systemd/systemd 文件的符号链接。简单地说,这个 Linux 安装使用了 systemd。如果这是基于 SystemV 的发行版,则该行将仅包含“File: /sbin/init ”。
使用 systemctl 询问服务
服务是在单元文件中定义的,您会看到单词“单元”分散在整个 systemctl 选项中。作为一个例子,我们可以使用带有 --type 选项的 list-units 命令获取服务列表。
systemctl list-units --type=service
输出显示在 less 文件查看器中,允许您滚动浏览输出,并使用/键进行搜索。
- 单位:单位文件的名称。
- 加载:如果服务的单元文件已读入内存且没有语法错误,则此列将包含“loaded.txt”。 “这并不意味着该服务处于活动状态。
- 活动:服务是否处于活动状态的高级视图。活动服务可能未运行。
- 子:更详细地了解服务是否正在运行。例如,活动服务可能会根据计时器进行计时,并且可能已退出其上次执行运行。
- 描述:用于标识或描述服务的一行文本。
显示仅包括活动服务。要查看所有服务,我们需要包含 --all 选项。
systemctl list-units --all --type=service
如果看到所有内容都太像信息过载,我们可以使用 --state 选项过滤输出。
systemctl list-units --type=service --state=running
状态选项将接受正在运行、已停止、已启用、已禁用和失败。
要关注失败的服务,请使用 --failed 选项。
systemctl list-units --failed
这台计算机上没有出现故障的单元。
如果您确实看到任何失败的服务,请使用 list-dependencies 选项检查是否存在未满足的依赖项。
systemctl list-dependencies sshd.service
依赖项有一个代表其状态的颜色编码圆圈。它可以是:
- 白色圆圈:不活动或维护
- 绿点:活动。
- 白点:停用。
- 红点:失败或错误。
要检查单个服务是否已启用,请使用 is-enabled 命令并提供该服务的单元文件的名称。
systemctl is-enabled htg-example.service
使用 systemctl 控制服务
使用 systemctl 来管理服务非常简单,并且遵循我们迄今为止看到的命令的格式。最大的区别是您需要使用 sudo 来更改服务状态。到目前为止我们还没有必要使用它,因为我们只报告服务状态。
要启动服务,请使用启动命令,后跟服务名称。
sudo systemctl start htg-example.service
如果一切顺利,您将默默地返回到命令提示符。如果您希望获得肯定的确认,可以从 status 命令获得验证。
sudo systemctl status htg-example.service
停止服务与启动服务一样简单。
sudo systemctl stop htg-example.service
您可以重新启动服务,而不必经历手动停止然后启动它的两步过程。重新启动命令会为您完成这一切。
sudo systemctl restart htg-example.service
如果您希望某个服务在启动时启动,则需要启用它。
sudo systemctl enable htg-example.service
请注意,这只是标记服务,以便它在启动时启动,而不是立即启动它。如果这就是您想要的,请添加 --now 标志。
sudo systemctl enable --now htg-example.service
当您不再需要在启动时启动某个服务时,请将其禁用。
sudo systemctl disable htg-example.service
您可以使用journalctl命令(systemd的另一部分)来查找与您的服务相关的条目。 -u(单位)选项允许您指定您感兴趣的服务。使用 -S(自)选项,您可以显示自您提供以来发生的条目。
journalctl -S "08:00:00" -u htg-example.service
您的服务工具包
任何可以帮助您深入了解 Linux 发行版内部运作的工具都将成为有用的工具,可用于日常管理以及故障排除和诊断问题。 systemctl 命令不是一个单一的工具。它更像是一个装有专业工具的工具箱,非常值得掌握。