百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Linux 软件开发人员指南:3 使用 systemd 管理服务

bigegpt 2024-10-16 07:56 2 浏览


在上一章中,您了解了 Linux 中进程的工作原理。现在,让我们看看这些进程是如何被封装在额外的抽象层中的:systemd 服务。

到目前为止您看到的命令——ls、mv、rm、ps 等——都在前台运行,并且附着在您的 shell 会话上。您运行它们,程序执行它们的任务,然后它们退出。然而,并非所有程序都这样运行。

服务,也经常被称为守护进程,是长时间在后台运行的进程。这些可以是数据库和 Web 服务器等,也可以是常规的系统服务,比如您的网络管理器、桌面环境等。这些长时间运行的后台服务通常通过像 systemd 这样的 init 系统启动和控制。

这里的 init 指的是操作系统内核启动的第一个进程,这个进程的任务是负责启动系统中配置为运行的所有其他进程。

使用名为 systemctl 的命令行实用程序控制 systemd 服务。它将被用来启动和停止服务,例如,重启一个表现异常的服务或重新加载配置已更改的服务。

如果您在书中跳来跳去,还没有读前一章,您仍然可以从这一章中获得价值。现在,只需将进程视为任何正在运行的命令、应用程序或服务。当您准备好更详细地了解进程的工作原理时,您可以阅读第 2 章,“处理进程”。

在本章中,您将学习所有关于以下内容:

  • 您将用于与 systemd 服务交互的命令:systemctl
  • 对 init 系统的作用以及 systemd 如何特别扮演这一角色的更深入了解
  • 使用 systemctl 管理服务
  • 在容器环境(如 Docker 容器)中工作的一些技巧,这些环境通常没有我们在本章描述的强大服务管理层

注意

本章仅适用于 Linux —— macOS 和 Windows(甚至其他 Unix 系统)使用不同的工具管理进程。实际上,不同的 Linux 发行版使用不同的工具,然而,systemd 是最广泛使用的。虽然概念相似,但了解现代 Linux 环境如何管理服务对开发者最有用。

基础知识

Linux 服务是在 Linux 系统上运行的后台进程,用于执行特定任务。它们与 Windows 服务或 macOS 上的守护进程类似。

大多数非容器化的 Linux 环境使用 systemd 来管理服务。您将使用以下两个工具与 systemd 交互:

  • systemctl:控制服务(在 systemd 术语中称为“单元”)
  • journalctl:让您使用系统日志

我们将在本章介绍 systemctl,并在本书后面的第 16 章“监控应用程序日志”中介绍 journalctl。

systemd 是 Linux 的系统和服务管理器,提供了一种标准的方式来管理服务。它现在被广泛用作大多数 Linux 发行版的默认 init 系统。许多 Linux 发行版之前使用的是来自 Unix 的 SysV init 系统,这些系统仍然被许多现代 Unix 操作系统使用。其他的,如 Alpine 和 Gentoo Linux,使用 OpenRC 作为他们的 init 系统。还有更多的 init 系统存在,然而,绝大多数 Linux 发行版现在使用 systemd。有了 systemd,可以启动、停止、重启、启用(设置为在启动时启动)、禁用服务,并检查它们的状态。服务由一个单元文件定义,该文件指定了服务应该如何被 systemd 管理。

要使用 systemd 管理服务,您可以使用以下基本命令(我们将在本章后面深入每个命令):

  • systemctl start <service>:启动服务。
  • systemctl stop <service>:停止服务。
  • systemctl restart <service>:重启服务。
  • systemctl status <service>:显示服务的当前状态。

请记住,只有具有 root 权限的用户(例如,使用 sudo)才能使用 systemd 管理系统服务。

init

让我们快速了解一下您会经常看到的一个常用术语。在 Linux 中,init —— “initialization”(初始化)的缩写 —— 是系统启动时启动的第一个进程。不出所料,您可以在 PID 1 中找到它。init 负责管理启动过程,并启动所有已配置为在系统上运行的其他进程和服务。它还将回收孤儿进程(原始父进程已死亡的进程)并将它们作为自己的子进程,以确保它们仍然正常运行。

就像 Linux 世界中的几乎所有事物一样,有几种不同的、相互排斥的程序可以担任这个角色。它们都被称为 init 系统,这是任何可以担任这个重要的引导、初始化和协调角色的软件的通用名称。如前所述,Linux 有几种可用的 init 系统,包括 System V init (SysV)、OpenRC 和 systemd。大多数现代 Linux 系统已经切换到 systemd,这也是我们在这里介绍它的原因。

您使用的是哪个 init 系统将决定服务的定义和管理方式,因此请记住,这里看到的所有内容只适用于 systemd。

进程和服务

让我们谈谈进程和服务之间微妙的区别。您可以将服务视为围绕软件的某种包装,使其更容易作为运行中的进程进行管理。

服务为程序(以及由此程序生成的进程)的系统处理方式增加了便利的功能。例如,它允许您定义不同进程之间的依赖关系,控制启动顺序,为进程添加启动时的环境变量,限制资源使用,控制权限等许多其他有用的事情。为了给整个包装打个结,服务提供了一个简单的名称来引用您的程序。我们将在稍后的第 10 章“配置软件”中向您展示如何创建自己的服务。

在本章的其余部分,我们将坚持管理现有的服务。

systemctl 命令

systemctl 是您将用于管理系统上已定义服务的工具。这些示例将使用不存在的 foobar 服务作为您可能管理的任何服务的代表。

检查服务状态

systemctl status <service> 检查服务的状态。您将获得各种可用于各种故障排除任务的数据。这是 nginx Web 服务器服务的输出示例:


图 3.1: nginx Web 服务器服务输出

让我们逐行剖析这个命令产生的密集输出信息:

  • 服务名称:服务在其单元文件中定义的名称。
  • 加载状态:服务单元文件是否已成功加载并准备好启动。
  • 活动状态:服务的当前状态——是否正在运行、非活动或失败——以及这种情况持续了多长时间。
  • 文档:如果已安装,这是您可以找到相关文档的主页面。
  • 主进程和子进程:与服务相关联的主进程的进程 ID (PID),以及已启动的任何子进程的附加条目。
  • 资源使用情况:RAM(内存)和 CPU 时间。
  • 控制组 (CGroup):有关此进程所属控制组的详细信息。
  • 日志预览:服务输出的一些日志行,让您了解正在发生的事情。 这些信息提供了服务及其状态的详细概述,对于调试问题或检查服务的健康状况非常有用。

如果服务失败,输出通常会提供失败的原因,例如退出代码或错误描述。

启动服务

systemctl start foobar

这将启动服务。如果服务已经在运行,此命令将不会产生任何效果。

停止服务

systemctl stop foobar

这将停止服务。如果服务没有在运行,那么它应该不会产生任何效果。

重启服务

systemctl restart foobar

这将停止然后启动服务。它等同于运行:

systemctl stop foobar
systemctl start foobar

注意 小心使用此命令:如果服务的配置文件自启动以来在磁盘上已更改,并且该配置文件中有一个错误阻止程序成功启动,那么重启将愉快地停止您正在运行的服务,然后无法再次启动它。

这种合乎逻辑但可能不受欢迎的行为多年来已经困扰了许多开发人员,因此在重启之前请确保您的服务配置仍然有效。

许多流行的程序都有内置的配置验证,例如,对于 nginx,您可以运行:

nginx -t

以测试磁盘上的配置。

重新加载服务

systemctl reload foobar

并非所有服务都支持此子命令——这取决于创建服务配置的人来实现它。如果服务有重新加载选项,它通常比重启更安全。

通常,重新加载:

  • 重新检查磁盘上的配置以确保其有效
  • 如果可能,在不中断运行进程的情况下重新将配置读入内存
  • 在验证配置并确保进程在停止后能成功启动后,仅重新启动进程

像 Linux 中的许多事情一样,这是一种约定,而不是严格强制的要求,所以您可能会遇到软件:

  • 没有实现重新加载子命令
  • 没有实现上述一些安全特性(配置验证等)
  • 用重新加载做其他事情,因为开发者或打包者认为这是个好主意

通常,当更新应用程序的配置文件时,特别是在生产环境中,您应该优先选择重新加载而不是重启。

启用和禁用

systemctl enable foobar – 配置 foobar 在启动时自动启动。
systemctl disable foobar – 如果 foobar 配置为自动启动,则去除该配置,并将 foobar 变成手动管理的服务。

这里的关键区别在于,虽然 start 和 stop 会立即生效——它们确保服务现在正在运行(或停止);enable 和 disable 是关于将来的系统启动。然而,它们在运行命令时对服务的“运行”状态没有影响。

开发人员常犯的一个错误是假设 enable 会启动服务。它不会。如果您现在想启动 nginx Web 服务器,并确保它在每次虚拟机重启时自动启动,您需要运行两个命令:

systemctl start nginx
systemctl enable nginx

因此,enable 和 disable 带有一个可选标志,也可以启动(或在 disable 的情况下停止)服务。这个命令等同于上面的两个命令:

systemctl enable --now nginx

关于 Docker 的说明 虽然 systemctl 是传统 Linux 系统上管理服务的常用工具,但由于容器的隔离和自包含特性,它通常不在 Docker 容器中使用。

Docker 容器理想上运行一个单一进程,因此不需要复杂的启动阶段或进程管理。从本质上讲,容器就是进程,并且无法访问主机系统的 init 系统(包括 systemd)。

虽然在 Docker 容器中可以访问这些命令,但通常不建议在其中使用任何类型的服务管理系统。

Docker 容器理想上包含一个单一应用程序,并且在启动时启动一个单一进程。为此,不需要服务管理——运行中的容器是您的服务包,您的 Docker 容器本质上就是您的进程。

我们不推荐包含多个进程或重大内部服务管理的 Docker 设置,所以我们不会在这里讨论:就像家庭一样,所有快乐的 Docker 镜像都以相同的方式相似,而每个不快乐的 Docker 配置都有它自己的不快乐方式。

结论 在本章中,您学习了如何在 Linux 中管理服务,并介绍了您将用于控制它们的实用命令。我们为您提供了理论,以便您能够理解在实时系统中遇到的所有术语:init 是什么,systemd 在 Linux 系统上的作用,以及您需要与之交互的命令。

在下一章中,我们将向您展示一些与您的 shell 和命令历史交互的有用技巧,以便您可以节省时间,看起来像您最喜欢的电影中的 Unix 奇才(这也会使您在日常工作中变得更快、更高效,但这样说就没有那么有趣了)

相关推荐

科氪 | 华硕天选6系列正式发布,搭载满功耗RTX 5060实际到手5999元起

5月19日晚,华硕旗下潮玩新次元游戏本天选6系列正式发布。作为Z世代青年的潮酷游戏装备,天选6系列再一次印证了其出色的综合实力。搭载满功耗RTX5060笔记本电脑GPU的天选6Pro以及天选6皆...

最新历史最低价显卡汇总!低端高端一网打尽

文|宋金戈责编|吕东兴总编|唐迪近期开展的618大促,各个品类尤其是数码科技好物的产品优惠都诚意满满,而作为消费者最关心的大类之一,显卡在最近同样表现不俗——华硕、技嘉等多个品牌,从1660s...

DNF:南山必胜客“败诉”,TX被DD373实锤,谁说玩家只有使用权?

TX和DD373的官司终于落下帷幕,南山必胜客终于中断了传奇。TX这一次被判定败诉。其中关于游戏账号和虚拟财产的问题,最受玩家关注。之前TX所说的:游戏账号不是玩家私有财产,游戏币更不是,只有使用权!...

Switch最新SX OS破解系统发布:可运行国行卡带xci镜像了

本周,TX团队(Team-Xecuter)发布了SXOS自制系统的最新版本,v2.9.5Beta,该版本支持了任天堂最新的V10.0.0和v10.0.1固件,同时改善了兼容性,优化了本地联机的稳定...

神舟战神TX8R5 QHD游戏本电脑今晚开售:2.5K屏+RTX4060,6999元

IT之家4月9日消息,神舟战神TX8R5QHD游戏本电脑今晚12点正式开售,仅有16GB+512GB一个版本可选,售价6999元。神舟战神TX8R5QHD搭载13代酷...

开创第三代手游商业模式《武极天下》推无商城玩法

翻阅游戏论坛与贴吧,大家对网络游戏的一些“坑爹”的设定抱怨不已,不是游戏职业设定不合理,就是游戏太烧钱,在游戏中被碾压的抬不起头,最后从玩游戏变成了被游戏玩,俨然游戏本质完全变味。由巨人移动自主研发并...

真满血Gen5电竞存储神装!佰维X570 Pro天启高速固态硬盘测评

2025一开年,对于存储行业来说,就是速度狂飙的开局。各固态硬盘品牌PCIe5.0SSD纷纷亮相,开启了新一轮的性能PK。在2024年异常活跃的佰维科技,也于CES期间推出了佰维X570PRO...

Kingston FURY Renegade G5评测 最速PCIe5.0固态硬盘诞生

【ZOL中关村在线原创评测】说起KingstonFURYRenegade叛逆者的大名,相信PCDIY玩家都知道这是金士顿高端存储的代名词,尤其是内存产品给人印象尤为深刻。实际上它还有固态硬盘系列...

《武极天下》力挺苹果TestFlight创业界先河

关于革旧鼎新,有人说就像是摸石头过河,在摸索中前行。一场正真的创新改革会带来什么?在数字行业,苹果公司的每一个产品都代表着一个时代的开启,它独立的操作系统、顺应用户需求的体验设计,在十几年时间内收获了...

闪迪至尊超极速移动固态硬盘USB4版评测 超越SSD的三防猛兽

移动固态硬盘,凭借TB级的容量和远超传统移动机械硬盘几倍、十几倍的速度,当仁不让地成为高效移动存储的代名词,为4K/8K超高清内容创作、海量文件备份带来了超乎想象的效率提升。国际知名品牌SanDisk...

RTX5070笔记本有哪些:游戏笔记本电脑哪个牌子好?

RTX5070游戏本,个人其实不是很喜欢,对于新款显卡,要不就考虑RTX5060,要不就考虑12GB显存的RTX5070Ti这样好一些,从RTX5070显卡的游戏本的量,也能看出来,估计5060会更多...

破军天下安装指南详解 游戏安装方法介绍

破军天下游戏怎么正确安装?破军天下安装方法是什么?对于破军天下中的安装问题,今天安趣网小编就为各位玩家小伙伴来好好的讲解下,让我们一起来看看,破军天下怎么正确安装游戏的吧!希望大家喜欢!安卓系统(An...

从高性能轻薄本到硬核电竞本 华硕天选新品解锁全场景体验

来源:环球网【环球网科技综合报道】5月19日,华硕天选多款笔记本新品正式发布。其中,14英寸轻薄全能本标杆华硕天选Air2025正式发布,显卡升级至GeForceRTX5060笔记本电脑GPU...

笔记本无线网卡有哪几种 有必要对其升级吗?

无线网卡是很多朋友购买笔记本时容易忽视的部分,相比较处理器、内存、显卡和硬盘,无线网卡几乎不可选,而且很少有厂商提到自家产品采用的无线网卡型号。大家可能遇到过这种情况:为什么手机可以连接到5Ghz,而...

下班了才发现,你的手机里藏着5个定时炸弹!

各位打工人累了一天终于可以躺平刷手机了吧?且慢!工信部最新通知,有些App比加班还可怕!它们可能正在偷偷收集你的信息,比你的老板还要了解你!今天就让我们一起来扒一扒这些“职场内鬼“,看看你的手机里有没...