38

Linux的Systemd系统管理

 4 years ago
source link: https://www.ishells.cn/archives/linux的systemd系统管理
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ZNRbQbr.jpg!web

IrmQVjm.jpg!web

rMjqaeU.jpg!web

2、系统管理

Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。

2.1 systemctl

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

# 重启系统
$ sudo systemctl reboot

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

# CPU停止工作
$ sudo systemctl halt

# 暂停系统
$ sudo systemctl suspend

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

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

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

2.2 systemd-analyze

systemd-analyze命令用于查看启动耗时

# 查看启动耗时
$ systemd-analyze

a2uyMvI.png!web

# 查看每个服务的启动耗时
$ systemd-analyze blame

YFJj22Q.png!web

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

IvQnUbQ.png!web

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

ANF3eem.png!web

2.3 hostnamectl

hostnamectl命令用于查看当前主机的信息

# 显示当前主机的信息
$ hostnamectl

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

2.4

localectl命令用于查看本地化设置

# 查看本地化设置
$ localectl

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

ba6vUrU.png!web

2.5 timedatectl

timedatectl命令用于查看当前时区设置

# 查看当前时区设置
$ 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

R7NJfyy.png!web

2.6 loginctl

loginctl命令用于查看当前登录的用户

# 列出当前session
$ loginctl list-sessions

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

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

3、Unit

3.1 概念

Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。Unit 一共分成 12 种。

ayaAz2N.jpg!web

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

# 列出正在运行的 Unit
$ systemctl list-units

6jANr2F.png!web

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

# 列出所有没有运行的 Unit
$ systemctl list-units --all --state=inactive
# 列出所有加载失败的 Unit
$ systemctl list-units --failed

InuUBv6.png!web

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

aYfiumM.png!web

3.2 Unit 的状态

systemctl status命令用于查看系统状态和单个 Unit 的状态

# 显示系统状态
$ systemctl status

# 显示单个 Unit 的状态
$ sysystemctl status docker 

# 显示远程主机的某个 Unit 的状态
$ systemctl -H root@ishells status docker

除了status命令,systemctl还提供了三个查询状态的简单方法,主要供脚本内部的判断语句使用

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

zmAJzmN.png!web

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

JBvqEbU.png!web

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

qEJNRzQ.png!web

3.3 Unit 管理

日常使用中,最熟悉的就是以下这些命令了应该

# 立即启动一个服务
$ sudo systemctl start docker .service

# 立即停止一个服务
$ sudo systemctl stop docker .service

# 重启一个服务
$ sudo systemctl restart docker.service

# 杀死一个服务的所有子进程
$ sudo systemctl kill docker.service

# 重新加载一个服务的配置文件
$ sudo systemctl reload docker.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

3.4 Unit依赖关系

相互依赖关系主要分为三种:socket依赖、D-Bus(进程间通信)依赖、文件系统依赖。在systemd初始化系统机制中,不管程序的依赖关系如何,全部可以并行启动,若调用的服务程序存在依赖关系,则自动激活其他程序。

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

systemctl list-dependencies docker.service

ayeAnu3.png!web

上图显示的结果中,Target类型(下文)的依赖默认不会展开显示,如果要展开Target,就需使用--all参数

systemctl list-dependencies --all  docker

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK