Linux systemctl 命令实战示例

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何使用 systemctl 命令,这是 Linux 中管理系统服务的主要工具。你将了解 systemctl 的用途和功能,学习如何使用各种 systemctl 命令来管理系统服务,并配置服务的自动启动。实验涵盖了服务管理的基本方面,包括启动、停止、启用和禁用服务,以及查看它们的状态和日志。本实验旨在通过强大的 systemctl 命令,为你提供系统配置和设置的实践经验。

Linux 命令速查表


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/service -.-> lab-422947{{"Linux systemctl 命令实战示例"}} linux/nano -.-> lab-422947{{"Linux systemctl 命令实战示例"}} end

了解 systemctl 的用途和功能

在这一步中,你将学习 systemctl 命令的用途和功能,这是 Linux 中管理系统服务的主要工具。

systemctl 命令是 systemd 初始化系统的一部分,systemd 是许多现代 Linux 发行版(包括 Ubuntu 22.04)默认使用的初始化系统。Systemd 提供了一种统一的方式来管理系统服务,允许你启动、停止、启用和禁用服务,以及查看它们的状态和日志。

让我们从探索 systemctl 的基本用法开始:

## 列出所有正在运行的服务
sudo systemctl list-units --type=service

## 示例输出:
## UNIT                           LOAD   ACTIVE SUB     DESCRIPTION
## accounts-daemon.service        loaded active running Accounts Service
## acpid.service                  loaded active running ACPI event daemon
## apparmor.service               loaded active exited  AppArmor initialization
## ...

此命令列出了系统上所有正在运行的服务。你可以看到服务名称、它们的加载状态、活动状态和子状态,以及每个服务的简要描述。

要查看特定服务的状态,可以使用 status 子命令:

## 检查 sshd 服务的状态
sudo systemctl status sshd.service

## 示例输出:
## ● sshd.service - OpenSSH server daemon
##      Loaded: loaded (/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
##      Active: active (running) since Fri 2023-04-28 12:34:56 UTC; 1 day 2h ago
##        Docs: man:sshd(8)
##              man:sshd_config(5)
##    Main PID: 12345 (sshd)
##       Tasks: 1 (limit: 4915)
##      Memory: 12.8M
##      CGroup: /system.slice/sshd.service
##              └─12345 /usr/sbin/sshd -D

此输出提供了关于 sshd 服务的详细信息,包括其当前状态、启动时间以及运行服务的进程 ID。

你还可以使用 systemctl 来启动、停止或重启服务:

## 启动 sshd 服务
sudo systemctl start sshd.service

## 停止 sshd 服务
sudo systemctl stop sshd.service

## 重启 sshd 服务
sudo systemctl restart sshd.service

这些命令允许你控制系统服务的生命周期。

在下一步中,你将学习如何使用更多的 systemctl 命令来管理系统服务。

使用 systemctl 命令管理系统服务

在这一步中,你将学习如何使用各种 systemctl 命令来管理系统服务。

让我们从启用服务以在系统启动时自动启动开始:

## 启用 sshd 服务以在启动时自动启动
sudo systemctl enable sshd.service

## 示例输出:
## Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /lib/systemd/system/sshd.service.

此命令创建了一个指向服务单元文件的符号链接,确保 sshd 服务在系统启动时自动启动。

要禁用服务自动启动,可以使用 disable 子命令:

## 禁用 sshd 服务在启动时自动启动
sudo systemctl disable sshd.service

## 示例输出:
## Removed /etc/systemd/system/multi-user.target.wants/sshd.service.

现在,让我们手动启动和停止服务:

## 启动 sshd 服务
sudo systemctl start sshd.service

## 停止 sshd 服务
sudo systemctl stop sshd.service

这些命令允许你控制 sshd 服务的运行状态。

如果你需要重启服务,可以使用 restart 子命令:

## 重启 sshd 服务
sudo systemctl restart sshd.service

此命令将首先停止服务,然后再次启动它。

最后,你可以使用 status 子命令检查服务的状态:

## 检查 sshd 服务的状态
sudo systemctl status sshd.service

此命令将显示 sshd 服务的当前状态,包括它是否正在运行、启动时间以及任何错误消息。

在下一步中,你将学习如何使用 systemctl 配置服务的自动启动。

使用 systemctl 配置服务的自动启动

在这最后一步中,你将学习如何使用 systemctl 配置服务的自动启动。

Systemd 提供了一种强大的方式来管理服务的启动和依赖关系。你可以配置服务在系统启动时自动启动,或者根据其他服务的状态来启动和停止。

让我们从创建一个简单的服务单元文件开始。在 ~/project 目录下创建一个名为 myservice.service 的新文件:

sudo nano ~/project/myservice.service

将以下内容添加到文件中:

[Unit]
Description=My Custom Service
After=network.target

[Service]
ExecStart=/bin/bash -c "while true; do echo 'Running my service'; sleep 10; done"
Restart=always

[Install]
WantedBy=multi-user.target

这个服务单元文件定义了一个简单的服务,它会运行一个无限循环,每 10 秒打印一条消息。After=network.target 行确保服务在网络可用后启动,而 Restart=always 行确保如果服务停止,它会自动重启。

现在,让我们启用并启动服务:

## 启用 myservice.service 以在启动时自动启动
sudo systemctl enable ~/project/myservice.service

## 启动 myservice.service
sudo systemctl start myservice.service

你可以使用 systemctl status 命令检查服务的状态:

sudo systemctl status myservice.service

## 示例输出:
## ● myservice.service - My Custom Service
##      Loaded: loaded (/home/labex/project/myservice.service; enabled; vendor preset: enabled)
##      Active: active (running) since Fri 2023-04-28 12:34:56 UTC; 1 minutes ago
##    Main PID: 12345 (bash)
##       Tasks: 2 (limit: 4915)
##      Memory: 2.0M
##      CGroup: /system.slice/myservice.service
##              ├─12345 /bin/bash -c while true; do echo 'Running my service'; sleep 10; done
##              └─12346 sleep 10

这表明 myservice.service 正在运行,并且已配置为在系统启动时自动启动。

你现在已经学会了如何使用 systemctl 配置服务的自动启动。恭喜你完成了本实验!

总结

在本实验中,你首先学习了 systemctl 命令的用途和功能,这是 Linux 中管理系统服务的主要工具。你探索了如何列出所有正在运行的服务、检查特定服务的状态,并理解每个服务提供的详细信息。接下来,你学习了如何使用各种 systemctl 命令来管理系统服务,例如启动、停止、重启和启用服务。最后,你了解了如何使用 systemctl 配置服务的自动启动,确保关键服务在系统启动时启动。

Linux 命令速查表