介绍
近年来,Linux发行版越来越多地从其他 init 系统过渡到systemd
。systemd
工具套件提供了一个快速而灵活的 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
查看基本日志信息
一个名为journald
的systemd
组件从系统的所有部分收集和管理日志条目,这基本上是来自应用程序和内核的日志信息。
要查看所有日志条目,从最古老的条目开始,键入:
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 poweroff
或sudo reboot
而无需systemctl
。
下一步
到目前为止,您应该知道如何管理使用systemd
的服务器的基本知识,但是,随着需求的扩大,您可以学到更多信息。
通过学习如何利用 init 系统的优势,您可以控制机器的状态,并更容易管理您的服务和流程。