陈大剩博客

Linux 温习(四): Systemd 分析与应用

  • 陈大剩
  • 2023-02-03 09:36:53
  • 1105

进程

一个运行起来的程序被为 进程,进程的英语是 process

特殊的进程

这些进程不与任何终端关联,并且无论用户的身份如何,都在后台运行。这些进程的父进程是 PID(进程号)为 1 的进程,PID 为 1 的进程只在系统关闭时才会被销毁,这些进程会在后台一直运行。

守护进程

在 Unix / Linux 的世界中,我们将这类进程称之为 daemon (守护进程),daemon 是古希腊神话中的半神半人精灵、守护神的意思。守护进程也被称为service(服务),服务器软件大多都是以守护进程的形式运行的。

守护进程的名字通常会在最后有一个 d,表示 daemon,例如:systemd , httpd , smbd,等等

Windows 中的服务

在 Windows 的世界中,这样的进程也被称为service(服务)

Linux 操作系统启动的开机过程

操作系统启动的开机过程

新旧初始化进程服务

  • 旧版:System V
  • 新版:Systemd

新旧服务对比

systemd 命令 System V 命令 作用
systemctl start toto service toto start 启动服务
systemctl stop toto service toto stop 停止服务
systemctl restart toto service toto restart 重启服务
systemctl status toto service toto status 查看服务状态
systemctl reload toto service toto reload 重载配置文件(不停止服务)
systemctl enable toto chkconfig toto on 开机自动启动服务
systemctl disable toto chkconfig toto off 开机不自动启动服务
systemctl is-enabled toto chkconfig toto 查看服务是否开机自动启动
systemctl list-unit-files –type=service chkconfig –list 查看各个级别下服务的启动和禁用情况

用systemd管理系统服务

Systemd 是几乎所有最新的 Linux 发行版采用的初始化系统,Systemd 的 PID(进程号)是 1,其他进程都是它的子进程,Systemd并不是一个命令,它包含了一组命令,Systemd 是基于事件的,Systemd 可以使进程并行启动System V 是串行启动进程的,只有前一个进程启动完,才会启动下一个进程。Systemd 甚至可以重新启动因错误而停止的进程管理任务的计划,系统日志,外设,等。

管理进程的启动和停止

Systemd 提供了 systemctl 命令,使得我们可以管理 unit(单元),对 Systemd 来说,unit 泛指它可以操作的任何对象,unit 可以有不同的类型:服务,挂载,外设,等等,守护进程属于 service(服务)类型。

  • Service unit:系统服务
  • Target unit:多个 Unit 构成的一个组
  • Device Unit:硬件设备
  • Mount Unit:文件系统的挂载点
  • Automount Unit:自动挂载点
  • Path Unit:文件或路径
  • Scope Unit:不是由 Systemd 启动的外部进程
  • Slice Unit:进程组
  • Snapshot Unit:Systemd 快照,可以切回某个快照
  • Socket Unit:进程间通信的 socket
  • Swap Unit:swap 文件
  • Timer Unit:定时器
# 列出所有的活动单元
> systemctl

# 列出所有的服务是 service 的运行单元
> systemctl list-units --type=service

# 列出所有的服务文件 
> ls /usr/lib/systemd/system

# 显示服务的文件内容
> systemctl cat nginx

# 编辑服务文件(生产副本)
> systemctl edit nginx

# 编辑服务文件(编辑源文件)
> systemctl edit --full nginx

# 重载文件
> systemctl daemon-reload

使用 target , System V 的运行级别的演进

使用 target (目标)

  • System V使用 Run Level(运行级别)来管理不同的进
  • systemd 用 target 来替换了 System V 的运行级别
  • target 是指“目标”,简单来说是多个 unit 构成的一个组
systemd 的 target 名称 System V运行级别 作用
poweroff.target 0 关机
rescue.target 1 单用户模式
multi-user.target 2 等同于级别3
multi-user.target 3 多用户的命令行界面
multi-user.target 4 等同于级别 3
graphical.target 5 多用户的图形界面
reboot.target 6 重启
emergency.target emergency 紧急 Shell

Systemd 可以存在多个活动的 target,例如 swap.target,对应于可以被激活或不能被激活的系统功能,例如:graphical.target 对应于其他 target 的依赖。

# 列出所有 target
> systemctl list-units --type=target --all

# 列出 rescue.target 依赖关系
> systemctl list-dependencies rescue.target

# 列出默认的 target
> systemctl get-default

# 切换其他  rescue.target(单用户) 模式
> systemctl isolate rescue.target

# 设置默认的 target
> systemctl set-defalut rescue.target

使用 journalctl 命令管理日志

默认地,journalctl 按时间顺序显示由systemd管理的所有日志

# 按时间顺序显示所有日志
> journalctl

# 显示自上次启动以来所有的日志
> journalctl -b

# 显示自上次启动以来内核日志
> journalctl -b -k

# 查看 nginx 日志
> journalctl -u nginx 

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

# 启动总耗时
> systemd-analyze

# 每个 unit 总耗时
> systemd-analyze blame

# 禁止服务启动(手动启动也无效)
> systemctl mask nginx

# 解除禁止服务启动 
> systemctl unmask nginx

请慎用 mask 这个子命令,因为它是一个增强版本的 disable,会阻止了所有激活这个 unit 的行为,包括启用和手动激活。 mask是英语“掩盖,遮蔽”的意思。

手动配置

总结

  • systemd 管理 unit(单元),unit 可以有不同类型
  • unit 的管理由 systemctl 命令完成
  • systemd 的target取代了System V的运行级别
  • 可以通过 journalctl 命令来管理系统日志
  • 可以通过systemd-analyze命令来查看启动耗时

参考

分享到:
0

说点儿什么吧

头像

表情

本站由陈大剩博客程序搭建 | 湘ICP备2023000975号| Copyright © 2017 - 陈大剩博客 | 本站采用创作共用版权:CC BY-NC 4.0

站长统计| 文章总数[115]| 评论总数[9]| 登录用户[22]| 时间点[119]

logo

登入

社交账号登录