Systemd Essentials:使用服务、单元和日志

介绍

近年来,Linux发行版越来越多地从其他 init 系统过渡到systemdsystemd工具套件提供了一个快速而灵活的 init 模型,用于从启动开始管理整个机器。

在本指南中,我们将为您提供最重要的命令,您需要知道管理一个systemd启用服务器,这些命令应该在执行systemd的任何服务器上工作(任何版本的操作系统在Ubuntu 15.04,Debian 8,CentOS 7,Fedora 15或以上)。

基本单位管理

单元可以有许多类型,但最常见的类型是服务(由单元文件标记为.service). 要在systemd启用服务器上管理服务,我们的主要工具是systemctl命令。

所有正常 init 系统命令都具有与systemctl命令相等的操作,我们将使用nginx.service单元来演示(您需要在您的包管理器上安装 Nginx 才能获取此服务文件)。

例如,我们可以通过键入开始服务:

1sudo systemctl start nginx.service

我们可以通过键入再次阻止它:

1sudo systemctl stop nginx.service

要重新启动服务,我们可以键入:

1sudo systemctl restart nginx.service

要尝试重新加载服务而不打扰正常功能,我们可以键入:

1sudo systemctl reload nginx.service

允许或禁用单位

默认情况下,大多数systemd单元文件在启动时不会自动启动. 要配置此功能,您需要启用单元。

若要允许服务在启动时自动启动,请键入:

1sudo systemctl enable nginx.service

如果您想再次禁用该服务,请键入:

1sudo systemctl disable nginx.service

获得系统状态的概述

我们可以从systemd服务器中提取大量信息,以获得系统状态的概述。

例如,要获取systemd列为活跃的所有单元文件,请键入(您实际上可以排除list-units,因为这是默认的systemctl行为):

1systemctl list-units

若要列出「systemd」已加载或试图加载到内存的所有单元,包括目前不活跃的单元,请添加「--all」开关:

1systemctl list-units --all

要列出安装在系统上的所有单元,包括那些systemd尚未试图加载到内存的单元,请键入:

1systemctl list-unit-files

查看基本日志信息

一个名为journaldsystemd组件从系统的所有部分收集和管理日志条目,这基本上是来自应用程序和内核的日志信息。

要查看所有日志条目,从最古老的条目开始,键入:

1journalctl

默认情况下,如果journald配置为保存以前的启动记录,则会显示来自当前和以前的机器人的条目;有些分布会默认允许此功能,而另一些则不允许此功能(要启用此功能,要么编辑/etc/systemd/journald.conf文件,然后将Storage=选项设置为持久,要么通过键入sudo mkdir -p /var/log/journal来创建持久目录)。

如果您只想看到当前启动器的日志条目,请添加-b旗:

1journalctl -b

若要只查看内核消息,例如那些通常被dmesg表示的消息,您可以使用-k旗:

1journalctl -k

再次,您可以通过附加-b标志来仅限于当前启动:

1journalctl -k -b

Querying Unit 州和日志

虽然上述命令允许您访问一般系统状态,但您也可以获取有关单个单元的状态的信息。

要查看单位当前状态的概述,您可以使用状态选项与systemctl命令。

1systemctl status nginx.service

要查看有关单位的所有日志条目,请将-u选项与单位名称交给journalctl命令:

1journalctl -u nginx.service

像往常一样,您可以通过添加-b旗来限制当前启动的条目:

1journalctl -b -u nginx.service

检查单元和单元文件

到目前为止,您知道如何通过启动或停止一个单元的状态进行更改,并且您知道如何查看状态和日志信息,以了解该过程发生了什么。

单元文件包含systemd用于管理和运行单元的参数. 要查看单元文件的全部内容,键入:

1systemctl cat nginx.service

要查看单元的依赖树(单元systemd在启动单元时会尝试激活哪个单元),键入:

1systemctl list-dependencies nginx.service

這將顯示依賴單位,而「目標」單位會再度擴展. 若要再度擴展所有依賴單位,請通過「--all」旗:

1systemctl list-dependencies --all nginx.service

最后,要查看系统上单位设置的低级细节,您可以使用显示选项:

1systemctl show nginx.service

这将为您提供由systemd管理的每个参数的值。

修改单元文件

如果您需要对单元文件进行更改,则systemd允许您从systemctl命令本身进行更改,以便您不必去实际的磁盘位置。

要添加一个单元文件片段,可以用来附加或排除默认单元文件中的设置,只需拨打单元上的编辑选项:

1sudo systemctl edit nginx.service

如果您更喜欢修改单元文件的全部内容,而不是创建一个片段,请通过--full标志:

1sudo systemctl edit --full nginx.service

修改单元文件后,您应该重新加载systemd过程本身来收集您的更改:

1sudo systemctl daemon-reload

使用目标(Runlevels)

init系统的另一个功能是将服务器本身在不同的状态之间过渡,传统的 init系统通常称之为运行级别,允许系统在任何时候只处于一个运行级别。

systemd中,用来代替目标。目标基本上是服务器可以用来将服务器带入特定状态的同步点。

要查看系统上所有可用的目标,键入:

1systemctl list-unit-files --type=target

要查看systemd在启动时试图达到的默认目标(这反过来会启动构成该目标依赖树的所有单元文件),键入:

1systemctl get-default

您可以通过使用设置默认选项更改在启动时使用的默认目标:

1sudo systemctl set-default multi-user.target

要查看哪些单位与目标绑定,您可以键入:

1systemctl list-dependencies multi-user.target

您可以通过隔离选项更改系统状态,以便在目标之间过渡,这将阻止不与指定目标相关的任何单元。

1sudo systemctl isolate multi-user.target

停止或重新启动服务器

对于某些系统可以过渡的主要状态,可以使用捷径,例如,要关闭您的服务器,您可以键入:

1sudo systemctl poweroff

如果您想重新启动系统,则可以通过键入:

1sudo systemctl reboot

您可以通过键入启动到救援模式:

1sudo systemctl rescue

请注意,大多数操作系统都包含这些操作的传统名称,因此您可以简单地键入sudo poweroffsudo reboot而无需systemctl

下一步

到目前为止,您应该知道如何管理使用systemd的服务器的基本知识,但是,随着需求的扩大,您可以学到更多信息。

通过学习如何利用 init 系统的优势,您可以控制机器的状态,并更容易管理您的服务和流程。

Published At
Categories with 技术
comments powered by Disqus