目录

Systemd 简单介绍,使用及如何 Debug

目录

文章简介:学习 systemd 笔记

Linux 的启动 很长一段时间采用 init 进程。init 是系统启动后的第一个用户级程序,pid=1.

init 程序有两个缺点:

  1. 启动时间长。init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程;
  2. 启动脚本复杂。init 进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长;

为了解决这个问题,Lennart Poettering 设计了 systemd。

systemd 是 Linux 电脑操作系统之下的一套中央化系统及设置管理程序(init),包括有守护进程(daemon)、程序库以及应用软件.已知的主流 Linux 发行版都把 systemd 作为 init. systemd 还附带很多基础工具,包括 timesync, hostnamectl 等一系列管理系统的工具。具体使用方法 这里 已经讲了很多,在这里不再赘述。

systemd 使用情况如下:

系统 版本 备注
Ubuntu 15.04 及后续版本 1
Debian GNU/Linux Debian 8“Jessie”之后
Red Hat 及其派生品 7 及后续版本
Fedora 15 及后续版本

如何 debug

systemctl 提供了一些工具用于 debug。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
systemctl cat multi-user.service # 查看 unit 配置

systemctl show multi-user.service # 显示某个 Unit 的所有底层参数
systemctl show -p CPUShares multi-user.service # 设置某个 Unit 的指定属性
systemctl list-dependencies --all multi-user.service # 列出依赖项
systemctl list-dependencies --all multi-user.service # 列出依赖项

systemd-analyze critical-chain # cli 显示瀑布状的启动过程流
systemd-analyze blame # 分析当前系统各项服务启动时间
systemd-analyze plot > boot.svg # 分析当前系统各项服务启动顺序

ls /etc/systemd/system/
# 修改 unit 文件

# 重新加载 service 信息
# systemd 会将所有 unit 信息缓存在内存,只有重新加载,修改内容才会生效
systemctl daemon-reload

journalctl -u ssh.service -f # 查看 unit 日志

ref