Home systemd 基本命令的使用
Post
Cancel

systemd 基本命令的使用

systemd有强大的并行能力,可以使用socket或D-Bus激活服务,多种按需要启动服务,使用cgroups技术跟踪进程, 支持系统状态的快照和恢复,引导时自动挂载挂载点,基于事务依赖的控制逻辑。其主要架构图:

systemd 架构图

units

systemd 中管理所谓的 units , 它们可以指代系统资源或服务。其类型可以包括:
service
系统服务,可以启动,停止,重启等
socket
一个关联到service的socket,主要使用本地socket
device
一个有systemd管理的设备
mount
一个有systemd管理的文件系统挂载点
automount
系统引导时需要自动挂载的挂载点
swap
系统中的swap空间
target
多个units单元的同步点。通常用于系统引导时自启动服务。
path
用于path-based激活的路径。例如,可以根据某个确切路径是否存在等状态来启动服务。
timer
systemd定时器,例如,可以用来基于定时时间激活服务
snapshot
当前systemd状态的快照。通常用于在对systemd进行临时更改后回滚。
slice
通过Linux Control Group节点(cgroups)限制资源。
scope
systemd bus接口获取的信息。通常用于管理外部系统进程。

man page

systemd手册较多,可以从systemctl开始,扩展到相关命令。(systemd不是一个命令,有一套相关命令)

1
man systemctl

系统管理命令

systemctl是 Systemd 的主命令,用于管理系统。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 重启系统
$ sudo systemctl reboot

## 关闭系统,切断电源
$ sudo systemctl poweroff

## CPU停止工作
$ sudo systemctl halt

## 暂停系统
$ sudo systemctl suspend

## 让系统进入冬眠状态
$ sudo systemctl hibernate

## 让系统进入交互式休眠状态
$ sudo systemctl hybrid-sleep

## 启动进入救援状态(单用户状态)
$ sudo systemctl rescue

启动性能分析

systemd-analyze命令可以用于查看系统引导过程中各个服务等的使用时间,方便进行启动优化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## 查看系统引导的整体时间
$ systemd-analyze time

## 查看系统引导过程中每个单元的时间占用情况	
$ systemd-analyze blame

## 图形化查看系统各个组件启动引导占用时间
$ systemd-analyze plot > plot.svg
$ eog plot.svg

## 显示瀑布状的启动过程流
$ systemd-analyze critical-chain

## 显示指定服务的启动流
$ systemd-analyze critical-chain atd.service

主机信息查看和修改

hostnamectl命令用于查看当前主机的信息,并支持修改。可以参考手册。

1
2
3
4
5
## 显示当前主机的信息
$ hostnamectl

## 设置主机名。
$ sudo hostnamectl set-hostname rhel7

本地化设置

localectl命令用于查看本地化设置,并支持修改。可以参考手册。

1
2
3
4
5
6
## 查看本地化设置
$ localectl

## 设置本地化参数。
$ sudo localectl set-locale LANG=en_GB.utf8
$ sudo localectl set-keymap en_GB

时区设置

timedatectl命令用于查看当前时区设置,并支持修改。可以参考手册。

1
2
3
4
5
6
7
8
9
10
## 查看当前时区设置
$ timedatectl

## 显示所有可用的时区
$ timedatectl list-timezones                                                                                   

## 设置当前时区
$ sudo timedatectl set-timezone America/New_York
$ sudo timedatectl set-time YYYY-MM-DD
$ sudo timedatectl set-time HH:MM:SS

登录用户控制

loginctl命令用于查看当前登录的用户,并支持锁定,终止等。可以参考手册。

1
2
3
4
5
6
7
8
## 列出当前session
$ loginctl list-sessions

## 列出当前登录用户
$ loginctl list-users

## 列出显示指定用户的信息
$ loginctl show-user [username]

Units 控制管理相关

查看units

systemctl list-units命令可以查看当前系统的所有 Unit 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 列出正在运行的 Unit
$ systemctl list-units

## 列出所有Unit,包括没有找到配置文件的或者启动失败的
$ systemctl list-units --all

## 列出所有没有运行的 Unit
$ systemctl list-units --all --state=inactive

## 列出所有加载失败的 Unit
$ systemctl list-units --failed

## 列出所有正在运行的、类型为 service 的 Unit
$ systemctl list-units --type=service

Unit 运行状态检查

查看unit运行状态等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 显示单个 Unit 的状态
$ sysystemctl status bluetooth.service

## 显示远程主机的某个 Unit 的状态
$ systemctl -H root@rhel7.example.com status httpd.service

# 显示某个 Unit 是否正在运行
$ systemctl is-active application.service

# 显示某个 Unit 是否处于启动失败状态
$ systemctl is-failed application.service

# 显示某个 Unit 服务是否建立了启动链接
$ systemctl is-enabled application.service

Unit 基本管理

units的基本管理,service对象最常见的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
## 立即启动/停止/重启一个服务
$ sudo systemctl start/stop/restart apache.service

## 使能/禁用/查看服务开机时自启动
$ systemctl enable/disable/is-enabled xxx.service

## 屏蔽服务,无法自启动或手动启动,除非手动解除
$ systemctl mask xxx.service

## 查看一个服务的对应service文件
$ systemctl cat xxx.service

## 修改一个服务,(覆盖模式,直接修改)
$ systemctl edit --full xxx.service

## 杀死一个服务的所有子进程,(向服务的所有子进程发送特定信号)
$ sudo systemctl kill apache.service

## 重新加载一个服务的配置文件
$ sudo systemctl reload apache.service

## 重载所有修改过的配置文件
$ sudo systemctl daemon-reload

## 显示某个 Unit 的所有底层参数
$ systemctl show httpd.service

## 显示某个 Unit 的指定属性的值
$ systemctl show -p CPUShares httpd.service

## 设置某个 Unit 的指定属性
$ sudo systemctl set-property httpd.service CPUShares=500

## 查看/设置启动等级
$ sudo systemctl [get-default]/[set-default multi-user.target]

Unit 依赖关系查看

Units 之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。

systemctl list-dependencies命令列出一个 Unit 的所有依赖。

1
2
3
4
$ systemctl list-dependencies nginx.service

## 进一步展开 所有Target,使用--all参数。
$ systemctl list-dependencies --all nginx.service

Unit配置文件状态

systemctl list-unit-files命令用于列出所有配置文件,可以查看其运行状态和自启动状态。

1
2
3
4
5
# 列出所有配置文件
$ systemctl list-unit-files

# 列出指定类型的配置文件
$ systemctl list-unit-files --type=service

参考

Systemd 入门教程:命令篇
Systemd 入门教程:实战篇

This post is licensed under CC BY 4.0 by the author.