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

ops/2025/1/1 17:42:14/

简介

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,再次回车后即可登录服务器

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

安装和配置步骤

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

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

systemctl status <servicename>

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

systemctl status ufw

输出应类似于:

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

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

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

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

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

systemctl show <servicename>

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

systemctl show apache2

输出应类似于:

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

systemctl show -p UMask apache2

输出应类似于:

systemctl__98">使用 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. 如果重新加载失败且服务未运行,则退出而不启动服务。

systemctl__182">使用 Linux systemctl 命令启用服务

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

systemctl enable <servicename>

例如,要启用 apache2

systemctl enable apache2

输出应类似于:

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

systemctl enable <servicename> --now

systemctl__206">使用 Linux systemctl 命令禁用服务

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

systemctl disable <servicename>

例如,要禁用 apache2

systemctl disable apache2

输出应类似于:

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

systemctl disable <servicename> --now

systemctl__230">使用 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

输出应类似于:

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

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

systemctl unmask <servicename>

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

systemctl unmask apache2

输出应类似于:

Systemd 单元管理

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

systemctl__280">使用 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

systemctl__313">使用 Linux systemctl 命令列出依赖项

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

systemctl list-dependencies <servicename>

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

systemctl list-dependencies apache2

输出应类似于:

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

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

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

systemctl cat <单元名称>

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

systemctl cat apache2

输出应类似于:

systemctl__351">使用 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__461">在远程主机上运行 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.ppmy.cn/ops/146012.html

相关文章

微信小程序 不同角色进入不同页面、呈现不同底部导航栏

遇到这个需求之前一直使用的小程序默认底部导航栏&#xff0c;且小程序默认入口页面为pages/index/index&#xff0c;要使不同角色呈现不同底部导航栏&#xff0c;必须要在不同页面引用不同的自定义导航栏。本篇将结合分包&#xff08;subPackages&#xff09;展开以下三步叙述…

线程池基础知识

线程池&#xff1a; 顾名思义就是管理一系列线程的资源池。当有任务要处理时&#xff0c;直接从线程池中获取线程来处理&#xff0c;处理完之后线程并不会立即被销毁&#xff0c;而是等待下一个任务。 使用线程池的好处 降低资源消耗&#xff1a;通过重复利用已创建的线程降…

深度学习中batch_size

Batch size调整和epoch/iteration的关系 训练数据集总共有1000个样本。若batch_size10&#xff0c;那么训练完全体样本集需要100次迭代&#xff0c;1次epoch。 训练样本10000条&#xff0c;batchsize设置为20&#xff0c;将所有的训练样本在同一个模型中训练5遍&#xff0c;则…

uniapp 微信小程序 数据空白展示组件

效果图 html <template><view class"nodata"><view class""><image class"nodataimg":src"$publicfun.locaAndHttp()?localUrl:$publicfun.httpUrlImg(httUrl)"mode"aspectFit"></image>&l…

2024国城杯 Web

这四道题目Jasper大佬都做了镜像可以直接拉取进行复现 https://jaspersec.top/2024/12/16/0x12%20%E5%9B%BD%E5%9F%8E%E6%9D%AF2024%20writeup%20with%20docker/ n0ob_un4er 这道题没有复现成功, 不知道为啥上传了文件, 也在 /tmp目录下生成了sess_PHPSESSID的文件, 但是就是…

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针-CSDN博客 类型含义使用场景示例nil表示一个指向 Objective - C 对象的空指针。在 Objective - C 和 Swift&#xff08;与 Objective - C 交互时&#xff09;中用于表示对象不存在。当一个对象变量没有指向任何有效的对象实例…

重启ubuntu服务器,如何让springboot服务自动运行

文章目录 1. 使用 systemd 服务步骤&#xff1a; 2. 使用 cron 的 reboot 任务步骤&#xff1a; 3. 使用 init.d 脚本&#xff08;适用于较旧版本&#xff09;步骤&#xff1a; 推荐方案 为了确保在重启Ubuntu服务器后&#xff0c;让springboot的服务test.jar象 nohup java -ja…

unity3d 重要框架,如 ugui、ngui、timeline、behavior designer、urp 等

Unity3D 提供了许多重要的框架和工具集&#xff0c;帮助开发者快速实现游戏功能。这些框架各有特点&#xff0c;适用于不同的场景。以下是对常见的 Unity 框架&#xff08;UGUI、NGUI、Timeline、Behavior Designer、URP&#xff09;的详细分析&#xff0c;包括涉及的知识点和代…