当前位置: 首页 > article >正文

如何在 Ubuntu 22.04 上使用 systemctl 管理 systemd 服务教程

简介

Systemd 是许多现代 Linux 发行版提供核心功能的默认服务管理器,而 systemctl 是用户与 systemd 服务交互的方式。这使得 systemctl 成为 Linux 管理员工具箱中重要的一部分。

在本文中,我们将探讨如何使用 systemctl 在使用 systemd 的系统上执行常见的管理任务。我们将手把手教你如何在 Linux 服务器上使用 systemctl 管理 systemd 服务。

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。

  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。

  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。

  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

  • 到此为止,我们的云服务器就远程连接上了。

安装和配置步骤

使用 Linux systemctl 命令检查服务状态

要检查特定服务的状态,通用的 systemctl 命令语法是:

systemctl status <servicename>

例如,要检查 ufw 防火墙的状态:

systemctl status ufw

输出应类似于:

在输出中,你不仅可以看到服务的状态和 PID,还可以看到来自 journalctl 的最近日志片段。

请注意,你还可以使用完整的 <servicename.service> 单元文件名(如 ufw.service)来运行 systemctl status 命令和其他与服务相关的 systemctl 命令。

使用 Linux systemctl 命令显示服务的属性

Systemd 属性定义了有关单元行为的详细信息。例如,DefaultEnvironment 定义传递给进程的 环境变量。许多属性值在 systemd-system.conf 中定义。

要显示 systemd 服务的所有属性,请使用此通用命令语法:

systemctl show <servicename>

例如,要查看 apache2 的所有属性,请执行此命令:

systemctl show apache2

输出应类似于:

要显示特定属性,请使用 -p 开关指定它。例如,要显示 apache2UMask 属性,请使用:

systemctl show -p UMask apache2

输出应类似于:

使用 Linux systemctl 命令启动和停止服务

现在,我们将使用 Linux systemctl 命令来演示使用 Apache Web 服务 apache2 作为示例来修改服务状态的不同方法。

停止服务

停止服务的通用语法是:

systemctl stop <servicename>

要停止 apache2,请运行:

systemctl stop apache2

启动服务

启动服务的通用语法是:

systemctl start <servicename>

要启动 apache2,请运行:

systemctl start apache2

重启服务

重启(停止然后启动)服务的通用语法是:

systemctl restart <servicename>

要重启 apache2,请运行:

systemctl restart apache2

重新加载服务(重新读取配置文件)

要“重新加载”服务(这意味着使其重新读取配置文件而不重新启动),通用的 systemctl 命令语法是:

systemctl reload <servicename>

要重新加载 apache2,请运行:

systemctl reload apache2

尝试重新加载服务,如果失败则回退到重新启动

并非所有服务都支持重新加载。如果尝试重新加载不支持重新加载的服务,可能会看到类似以下的错误:

systemctl reload-or-restart <servicename> 命令将:

  1. 尝试重新加载服务。如果重新加载成功,则退出。
  2. 如果重新加载失败且服务正在运行,则重新启动服务。
  3. 如果重新加载失败且服务未运行,则启动服务。

要在 apache2 上运行 reload-or-restart 命令,请使用:

systemctl reload-or-restart apache2

systemctl try-reload-or-restart <servicename> 命令类似,但不启动未运行的服务。对于 try-reload-or-restart,逻辑是:

  1. 尝试重新加载服务。如果重新加载成功,则退出。
  2. 如果重新加载失败且服务正在运行,则重新启动服务。
  3. 如果重新加载失败且服务未运行,则退出而不启动服务。

使用 Linux systemctl 命令启用服务

要使服务在系统启动时自动启动,应启用该服务。启用服务的基本 systemctl 命令语法是:

systemctl enable <servicename>

例如,要启用 apache2

systemctl enable apache2

输出应类似于:

如果想同时启用并启动服务,可以像这样附加 --now 开关:

systemctl enable <servicename> --now

使用 Linux systemctl 命令禁用服务

如果服务当前在系统启动时启动,而你想禁用该行为,可以使用:

systemctl disable <servicename>

例如,要禁用 apache2

systemctl disable apache2

输出应类似于:

如果想同时禁用并停止服务,可以像这样附加 --now 开关:

systemctl disable <servicename> --now

使用 Linux systemctl 命令屏蔽服务

禁用的服务仍然可以手动启动。屏蔽服务会禁用它,并禁止用户或进程在不首先取消屏蔽它的情况下启动它。

屏蔽服务的通用命令是:

systemctl mask <servicename>

请注意,要屏蔽 systemd 服务,通常需要确保在 /etc/systemd/system/ 中没有相应的 .service 文件。例如,要在我们的 Ubuntu 20.04 系统上屏蔽 apache2,可以使用以下命令:

  1. /etc/systemd/system/apache2.service 文件的名称更改(移动)为 /etc/systemd/system/apache2.service.old
mv /etc/systemd/system/apache2.service /etc/systemd/system/apache2.service.old
  1. 使用 Linux systemctl 命令屏蔽服务
systemctl mask apache2

输出应类似于:

使用 Linux systemctl 命令取消屏蔽服务

取消屏蔽已屏蔽的服务单元的通用命令语法是:

systemctl unmask <servicename>

例如,要取消屏蔽 apache2,请运行此命令:

systemctl unmask apache2

输出应类似于:

Systemd 单元管理

现在,让我们看看用于处理 Systemd 单元的有用命令。

使用 Linux systemctl 命令列出单元

Systemd 单元 是大多数 systemctl 命令的目标。单元是纯文本文件,描述了诸如服务、套接字、设备或文件系统挂载点之类的资源。
Systemd 服务在以 .service 结尾的单元文件中定义。例如,sshd 的单元文件是 sshd.service,RSYSLOG 的单元文件是 syslog.service

要列出系统上所有已加载的单元,请运行命令 systemctlsystemctl list-units(两个命令执行相同的操作)。

输出应类似于:

以下是每列的含义:

  • UNIT - systemd 单元的名称
  • LOAD - 指示配置是 loaded(systemd 解析并存储在内存中的配置)、errornot-foundbad-setting 还是 masked
  • ACTIVE - 指示单元的状态。示例状态包括 activeinactivefailed
  • SUB - “子状态”的缩写,SUB 值显示有关单元状态的更详细信息。对于服务,常见的 SUB 值包括 runningstopexited。你可以使用命令 systemctl --state=help 查看 systemd 单元的可用子状态。
  • DESCRIPTION - systemd 单元的描述。

默认情况下,systemctlsystemctl list-units 输出仅显示已加载的单元。要显示所有可用单元,请添加 --all 选项。

systemctl list-units --all

你还可以使用 --state--type 参数来过滤 systemctl 输出。

例如,要查看所有 activeloaded 服务单元,请使用:

systemctl list-units --state=active --type=service

使用 Linux systemctl 命令列出依赖项

你可以使用此通用的 systemctl 命令语法查看服务所依赖的其他单元:

systemctl list-dependencies <servicename>

例如,要查看 apache2 的依赖项:

systemctl list-dependencies apache2

输出应类似于:

使用 Linux systemctl 命令显示单元文件

systemctl cat 命令显示 systemd 正在主动使用的单元文件。此信息有助于确定是否已将对单元文件的更改加载到系统中。

使用 systemctl cat 命令显示单元文件的通用语法是:

systemctl cat <单元名称>

例如,要显示 apache2.service 的单元文件,请使用此命令:

systemctl cat apache2

输出应类似于:

使用 Linux systemctl 命令编辑单元文件

Linux systemctl 命令可以编辑定义服务的单元文件。服务单元文件使用 ini 样式格式,其中包含诸如 [Unit][Install][Service] 之类的部分,这些部分定义了不同的单元特征和行为。

要编辑现有的服务单元文件,通用的命令语法是:

systemctl edit --full <servicename>

例如,要编辑 apache2.service 文件,请运行命令:

systemctl edit --full apache2

该单元文件将在你的默认文本编辑器中打开。

要创建新的单元文件片段而不是编辑现有单元文件,请省略 --full 开关,如下所示:

systemctl edit <servicename>

保存新片段将在 <servicename.d> 目录中创建一个 override.conf 文件。 override.conf 中的设置将取代默认单元文件中的设置。

例如,如果运行命令 systemctl edit apache2,然后在片段中保存这些设置:

[Unit]
Description=The Pepper And Egg HTTP Server

将创建一个带有 override.conf 文件的 /etc/systemd/system/apache2.service.d/ 目录。 override.conf 文件包含我们在使用 systemctl edit 命令后保存的确切内容。我们可以使用以下命令查看内容:

cat /etc/systemd/system/apache2.service.d/override.conf

输出应类似于:

我们可以使用此 systemctl 命令重新加载 apache2 服务单元,使其使用新设置:

systemctl reload apache2

要了解有关服务单元文件的更多信息,请参阅 systemd.unit 和 systemd.service。

使用 targets

Systemd targets 将单元分组在一起,并定义系统在启动时可以进入的不同状态。虽然这两个概念之间存在许多差异(有关目标的深入研究,请参阅 systemd.special 手册页),但 systemd targets 类似于 SysV init 系统“运行级别”。

在高层面上,我们可以如下映射 systemd targets 和运行级别:

  • *poweroff.target 映射到运行级别 0* - 此目标用于系统关闭。
  • *rescue.target 映射到运行级别 1* - 此目标用于进入单用户模式。
  • *multi-user.target 映射到运行级别 2-4* - 此目标用于进入没有图形界面的标准多用户模式。
  • *graphical.target 映射到运行级别 5* - 此目标用于具有网络和显示管理器的多用户模式。
  • *reboot.target 映射到运行级别 6* - 此目标用于重新启动系统。

要检查 systemd 系统上的当前“运行级别”(默认目标),请运行以下命令:

systemctl get-default

输出应类似于:

要列出所有目标,请运行此命令:

systemctl list-units --type target --all

输出应类似于:

要将目标设置为默认目标,通用的 systemctl 命令语法是:

systemctl set-default <target_name>.target

例如,要将默认目标设置为多用户模式,请运行命令:

systemctl set-default multi-user.target

你应该看到类似于以下的输出:

要立即切换到特定的运行级别(目标),通用命令是:

systemctl isolate <target_name>.target

例如,要将默认目标设置为多用户模式,请运行命令:

systemctl isolate multi-user.target

在远程主机上运行 systemctl 命令

默认情况下,systemctl 命令在执行命令的本地服务器上运行。要在远程服务器上执行 systemctl 命令,请使用 -H--host 选项,并以 <username>@<hostname> 格式指定用户名和远程主机地址。

例如,要在 remotehost 上以 root 身份运行命令 systemctl status apache2,请执行此命令:

systemctl status apache2 -H root@remotehost
root@remotehost password:

输出应类似于:

结尾

通过对如何使用 Linux systemctl 命令的深入了解,你可以在许多现代 Linux 系统上高效地管理服务。要了解有关 systemd 和 systemctl 的更多信息,请查看 systemd 手册页。

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site


http://www.kler.cn/a/457249.html

相关文章:

  • Vue 针对浏览器参数过长实现浏览器参数加密解密
  • EasyExcel(读取操作和填充操作)
  • Python中PDF转Word的技术
  • 本机实现Llama 7B推理及部署
  • 自动驾驶3D目标检测综述(六)
  • plsql :用户system通过sysdba连接数据库--报错ora-01031
  • Pytorch | 利用MIG针对CIFAR10上的ResNet分类器进行对抗攻击
  • python lambda函数用法
  • Android `android.graphics.drawable` 包深度解析:架构与设计模式
  • zentao ubuntu上安装
  • EMNLP'24 最佳论文解读 | 大语言模型的预训练数据检测:基于散度的校准方法
  • 探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
  • 从零开始采用命令行创建uniapp vue3 ts springboot项目
  • 《PHP Switch》
  • DeepSeek-VL2部署指南
  • Linux总结之CentOS Stream 9安装mysql8.0实操安装成功记录
  • Qt For Android之环境搭建(Qt 5.12.11 Qt下载SDK的处理方案)
  • 药片缺陷检测数据集,8625张图片,使用YOLO,PASICAL VOC XML,COCO JSON格式标注,可识别药品是否有缺陷,是否完整
  • USB免驱全协议IC卡读写器 QT程序开发
  • 【服务器主板】定制化:基于Intel至强平台的全新解决方案
  • 手机h5加桌面图标
  • 深度学习笔记(10)——卷积神经网络
  • 全面了解 SQL Server:功能、优势与最佳实践
  • Stream API 的设计融合了多个经典设计模式
  • vulnhub-Raven2靶机的测试报告
  • MFC小知识:CEdit::GetSel函数的使用