Linux Systemd 介绍

发布时间: 更新时间: 总字数:912 阅读时间:2m 作者: 分享 复制网址

systemdLinux 系统的一种 中央化系统及设置管理程序(init),包括有守护进程程序库以及应用软件组成。目标是解决系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低系统的开销。

历史

在旧的 Linux 中,服务启动一直采用 init 进程。如:

$ /etc/init.d/apache2 start
$ service apache2 start

缺点如下:

  • 启动时间长:串行启动进程
  • 启动脚本复杂:init 进程只是执行启动脚本,不管其他事情,因此脚本需要处理各种异常情况

介绍

Unix 中通常以 d 作为系统 守护进程(daemon) 的后缀标识。Systemd 就是它要守护整个系统的进程,因此其 pid1

$ systemctl --version
systemd 215
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
$ pstree 1
systemd─┬─AliSecGuard───6*[{AliSecGuard}]
        ├─AliYunDun───23*[{AliYunDun}]
...

常见 systemd 文件:

  • Service units: 以 .service 结尾的配置文件,记录由 systemd 控制和监督的进程的信息
  • Socket units: 以 .socket 结尾的配置文件,编码包括 IPC 或网络套接字 Socket文件系统FIFO的信息,用于 socket 的激活,由 systemd 控制和监督,如 systemctl cat docker.socket
  • Target units: 以 .target 结尾的配置文件,编码 systemd 目标单元的信息,用于单元分组和启动时作为同步点

使用

systemctl

systemd-analyze

# 查看启动耗时
$ systemd-analyze

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

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

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

hostnamectl

# 主机的信息
$ hostnamectl

# 设置主机名
$ hostnamectl set-hostname cn-xiexianbin

loginctl

# 查看当前登录的用户
$ loginctl list-sessions
$ loginctl list-users
$ loginctl show-user root

journalctl

journalctl 用于管理日志

  • 配置文件:/etc/systemd/journald.conf
  • 服务:systemctl status systemd-journald.service
# 查看启动所有日志
$ sudo journalctl

# 查看内核日志
$ sudo journalctl -k

# 查看本次启动的日志
$ sudo journalctl -b

# 查看上一次启动的日志
$ sudo journalctl -b -1

# 查看指定时间的日志
$ sudo journalctl --since="2019-11-16 12:00:00"
$ sudo journalctl --since "10 min ago"
$ sudo journalctl --since yesterday
$ sudo journalctl --since "2019-11-15" --until "2019-11-16 12:00:00"

# 显示最新 10 行的日志
$ sudo journalctl -n

# 显示指定行数的日志
$ sudo journalctl -n 20

# 实时滚动显示最新日志
$ sudo journalctl -f

# 查看指定服务的日志
$ sudo journalctl /usr/lib/systemd/systemd

# 查看指定进程的日志
$ sudo journalctl _PID=1

# 查看某个路径的脚本的日志
$ sudo journalctl /usr/bin/bash

# 查看指定用户的日志
$ sudo journalctl _UID=88 --since today

# 查看某个 Unit 的日志
$ sudo journalctl -u tengine.service
$ sudo journalctl -u tengine.service --since today

# 实时滚动显示某个 Unit 的最新日志
$ sudo journalctl -u tengine.service -f

# 合并显示多个 Unit 的日志
$ journalctl -u tengine.service -u chrony.service --since today

日志 Suppressed 问题

Nov 16 10:21:14 cn-xiexianbin journal: Suppressed 1422 messages from /system.slice/tengine.service

解决方法:

  • 修改 /etc/systemd/journald.conf
[Journal]
RateLimitBurst=5000  # 1000
  • 重启服务
systemctl restart systemd-journald.service
最新评论
加载中...
Home Archives Categories Tags Statistics