首页 / 这12个`systemctl`命令将帮助你掌握Linux systemd服务的控制。

这12个`systemctl`命令将帮助你掌握Linux systemd服务的控制。

2024/12/8 05:30:15
systemctl` 是 `systemd` 初始化系统的中心管理工具,用于启动、停止和管理服务。它提供了丰富的功能,如查询服务状态、启用或禁用服务、查看日志等。大多数现代 Linux 发行版已采用 `systemd`,但一些仍使用传统的 SystemV init 系统。通过 `systemctl`,可以方便地控制和管理系统服务。
这12个`systemctl`命令将帮助你掌握Linux systemd服务的控制。
快速链接 什么是systemctl命令? `systemctl`命令是`systemd`初始化系统的中心管理工具,最著名的是用于启动和停止服务的工具。但它的功能远不止于此,这从其手册页超过1600行的长度可以看出。因为systemctl是一个管理工具,而不仅仅是服务启动器,你可以使用它来访问有关你的systemd系统和服务的有用信息。 大多数Linux发行版已经采用systemd,但有些发行版选择保留传统的SystemV init系统。如果你不确定你的发行版使用的是哪种方案,可以很容易地查出来。我们将使用stat命令查看init文件。 ```bash stat /sbin/init ``` 可执行文件 /sbin/init 是 SystemV 基于发行版中启动的第一个进程。在 systemd 基于发行版中,具有该名称的符号链接指向 systemd 文件。第一行显示,在这台Ubuntu测试机器上,/sbin/init是一个指向/lib/systemd/systemd文件的符号链接。显然,这个Linux安装使用了systemd。如果这是一个基于SystemV的发行版,该行将只包含“File: /sbin/init”。 使用 `systemctl` 查询服务 服务在单元文件中定义,你将在systemctl选项中看到单词“unit”。为了说明这一点,我们可以使用list-units命令并带有--type选项来获取服务列表。 ```bash systemctl list-units --type=service ``` 输出结果在less文件查看器中显示,允许你滚动查看输出,并使用/键进行搜索。 - **单元**: 单元文件的名称。 - **加载**: 如果服务的单元文件已正确读入内存且没有语法错误,该列将显示“已加载”。这并不意味着服务是活跃的。 - **活跃**: 服务是否活跃的高级视图。活跃的服务可能没有在运行。 - **子**: 更细粒度地查看服务是否正在运行。例如,一个活跃的服务可能被定时器定时,并且可能已经退出了其最后一次执行运行。 - **描述**: 用于标识或描述服务的一行文本。 该显示仅包括活动服务。要查看所有服务,我们需要包含 --all 选项。 ```bash systemctl list-units --all --type=service ``` 如果看到一切太多像是信息过载,我们可以使用 --state 选项来过滤输出。 ```bash systemctl list-units --type=service --state=running ``` 该状态选项将接受运行、停止、启用、禁用和失败。要专注于失败的服务,请使用 --failed 选项。 ```bash systemctl list-units --failed ``` 这台计算机没有故障单元。如果发现任何服务失败,请使用 list-dependencies 选项检查是否存在未满足的依赖关系。 ```bash systemctl list-dependencies sshd.service ``` 依赖项有一个颜色编码的圆圈表示其状态。它可以是: - **白圈**: 未激活或维护 - **绿点**: 激活中。 - **白点**: 禁用。 - **红点奖**: 失败或错误。 要检查单个服务是否启用,请使用 is-enabled 命令并提供服务单元文件的名称。 ```bash systemctl is-enabled htg-example.service ```

使用 systemctl 控制服务

使用systemctl管理服务非常简单,遵循我们迄今为止看到的命令格式。最大的区别是你需要使用sudo来更改服务的状态。到目前为止,我们还没有使用它,因为我们只报告了服务状态。要启动一个服务,请使用 start 命令,后跟服务的名称。 ```bash sudo systemctl start htg-example.service ``` 如果一切顺利,你会在命令提示符下无声地返回。如果你更喜欢有正面的确认,可以使用状态命令获取验证。 ```bash sudo systemctl status htg-example.service ``` 停止一个服务就像启动一个服务一样简单。 ```bash sudo systemctl stop htg-example.service ``` 你可以通过执行重启命令来重启服务,而无需经过手动停止和然后启动的两步过程。 ```bash sudo systemctl restart htg-example.service ``` 如果你想让一个服务在启动时自动启动,你需要启用它。 ```bash sudo systemctl enable htg-example.service ``` 请注意,这只会标记该服务,使其在启动时启动,但它不会立即启动。如果你希望立即启动它,请添加 --now 标志。 ```bash sudo systemctl enable --now htg-example.service ``` 当你不再需要一个服务在启动时启动时,请禁用它。 ```bash sudo systemctl disable htg-example.service ``` 你可以使用 `journalctl` 命令,这是 systemd 的一部分,来查找与你的服务相关的条目。`-u`(unit)选项让你指定你感兴趣的服务。使用 `-S`(since)选项,你可以