介绍
近年来,Linux发行版越来越多地从其他初始化系统过渡到systemd
。 systemd
工具套件提供了一个快速灵活的初始化模型,用于从引导开始管理整个机器。
在本指南中,我们将为您快速介绍管理启用systemd
的服务器所需了解的最重要命令。 这些命令应该适用于任何实现systemd
的服务器(任何Ubuntu 15.04及以上版本、Debian 8、CentOS 7、Fedora 15)。 让我们开始吧。
基本单元管理
systemd
管理和执行的基本对象是“单元”。 单元可以是许多类型,但最常见的类型是“服务”(以.service
为扩展名的单元文件表示)。 要在启用systemd
的服务器上管理服务,我们的主要工具是systemctl
命令。
所有常规的初始化系统命令都有systemctl
命令的等效操作。 我们将使用nginx.service
单元来演示(您需要使用软件包管理器安装Nginx以获取此服务文件)。
例如,我们可以输入以下命令来启动服务:
我们可以通过输入以下内容再次停止它:
要重新启动服务,我们可以输入:
要尝试重新加载服务而不中断正常功能,我们可以输入:
启用或禁用单元
默认情况下,大多数 systemd
单元文件在启动时不会自动启动。要配置此功能,您需要“启用”单元。这将将其连接到某个启动“目标”,导致在启动该目标时触发它。
要使服务在启动时自动启动,请输入:
如果您希望再次禁用服务,请输入:
获取系统状态概述
我们可以从 systemd
服务器中获取大量信息,以获取系统状态概述。
例如,要获取所有 systemd
列为“活动”的单元文件,请输入(实际上您可以省略 list-units
,因为这是默认的 systemctl
行为):
要列出systemd
已加载或尝试加载到内存中的所有单元,包括当前未激活的单元,请添加--all
开关:
要列出系统中安装的所有单元,包括systemd
尚未尝试加载到内存中的单元,请键入:
查看基本日志信息
A systemd
component called journald
collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.
要查看所有日志条目,从最旧的条目开始,请键入:
默认情况下,如果journald
配置为保存上一次引导记录,则会显示当前引导和上一次引导的条目。 一些发行版默认启用此功能,而其他发行版则不启用(要启用此功能,请编辑/etc/systemd/journald.conf
文件并将Storage=
选项设置为“persistent”,或通过键入sudo mkdir -p /var/log/journal
创建持久目录)。
如果您只希望查看当前引导的日志条目,请添加-b
标志:
要仅查看内核消息,例如通常由dmesg
表示的消息,您可以使用-k
标志:
同样,您可以通过附加-b
标志将其限制为仅适用于当前引导:
查询单元状态和日志
虽然上述命令让您可以访问一般系统状态,但您也可以获取有关各个单元状态的信息。
要查看单个单元当前状态的概述,可以使用systemctl
命令的status
选项。这将显示单元是否处于活动状态、有关进程的信息以及最新的日志条目:
要查看有关所讨论单元的所有日志条目,请使用journalctl
命令并提供-u
选项和单元名称:
像往常一样,您可以通过添加-b
标志将条目限制为当前引导:
检查单元和单元文件
到目前为止,您已经知道如何通过启动或停止单元来修改单元的状态,并且知道如何查看状态和日志信息以了解进程的运行情况。但是,我们还没有看到如何检查单元和单元文件的其他方面。
A unit file contains the parameters that systemd
uses to manage and run a unit. To see the full contents of a unit file, type:
要查看单元的依赖树(即systemd
在启动单元时将尝试激活的单元),请键入:
这将显示依赖单位,并递归展开目标
单位。要递归展开所有依赖单位,请传递--all
标志:
最后,要查看系统上单位设置的底层详细信息,您可以使用show
选项:
这将为您提供systemd
管理的每个参数的值。
修改单位文件
如果您需要对单位文件进行修改,systemd
允许您直接从systemctl
命令进行更改,以避免必须转到实际的磁盘位置。
要添加一个单位文件片段,该片段可用于附加或覆盖默认单位文件中的设置,只需在单位上调用edit
选项:
如果您希望修改单位文件的整个内容而不是创建片段,请传递--full
标志:
修改单位文件后,您应重新加载systemd
进程本身以应用您的更改:
使用目标(运行级别)
另一个初始化系统的功能是在不同状态之间转换服务器本身。传统的初始化系统通常将这些称为“运行级别”,允许系统一次只能处于一个运行级别。
在systemd
中,取而代之的是“目标”。目标基本上是服务器可以用来将服务器带入特定状态的同步点。服务和其他单元文件可以绑定到一个目标,并且多个目标可以同时处于活动状态。
要查看系统上可用的所有目标,请键入:
要查看systemd
在引导时尝试达到的默认目标(从而启动组成该目标依赖树的所有单元文件),请键入:
您可以使用set-default
选项更改引导时将使用的默认目标:
要查看绑定到目标的单元,您可以键入:
您可以使用isolate
选项修改系统状态以在目标之间进行转换。这将停止未绑定到指定目标的任何单元。请确保您正在隔离的目标不会停止任何必要的服务:
停止或重新启动服务器
对于系统可以转换到的一些主要状态,可以使用快捷方式。例如,要关闭服务器,可以键入:
如果您想重新启动系统,可以通过输入:
要进入救援模式,请键入:
请注意,大多数操作系统都包含传统的别名以执行这些操作,因此您可以简单地键入sudo poweroff
或sudo reboot
而不需要systemctl
。 但是,并不保证所有系统都设置了这些别名。
下一步
到目前为止,您应该了解到如何管理使用systemd
的服务器的基础知识。 但是,随着您的需求扩展,还有很多东西需要学习。 以下是一些有关我们在本指南中讨论的一些组件的更深入信息的指南链接:
通过学习如何利用您的init系统的优势,您可以控制机器的状态,并更轻松地管理您的服务和进程。