Please enable Javascript to view the contents

2024-04-22-Linux基础-服务管理-Systemd原理

介绍Linux系统管理的历史演进,以及systemd的主要功能,主要特点。

 ·  ☕ 3 分钟

Linux系统在引导时加载Linux内核后,便由Linux内核加载init程序,由init程序完成余下的引导过程,比如加载执行级别,加载服务,启动Shell/图形化界面等等。

Linux历史上服务管理一共出现过三种方式,init、service、systemd

init

Linux 最初一直采用 init 进程。

Init(初始化的简称)是系统启动时的第一个进程(initd的PID是0),其他进程都是它的子进程。

因为init的参数全在/etc/init.d目录下,所以使用 init 启动一个服务,命令如下:

1
/etc/init.d/nginx start

主要功能包括:

  • 启动服务:根据配置文件(如 /etc/inittab 或 /etc/init.d/ 目录下的脚本),启动系统服务。
  • 管理运行级别:在不同的运行级别(如单用户模式、多用户模式等)之间切换。
  • 处理信号:响应系统信号,如重启或关机。

service(System V init)

System V init是一个广泛使用的 init 系统,它在许多传统的 Unix-like 系统中被采用。

service是运行System V init(/etc/init.d 目录下的参数)的脚本命令service根据/etc/init.d目录下的服务配置运行程序。可以将service理解成init的一种实现。两者的服务管理方式没有区别

1
2
3
/etc/init.d/nginx start
或者
service nginx start

initservice存在以下缺点:

  • 启动时间长:init进程串行启动。
  • 启动脚本复杂:init进程有启动执行脚本,不管理其他阶段,脚本需要自行处理其他各种情况。

systemd

2015年以后(Ubuntu-15.04|RHEL-7),为克服System V init启动时间长、脚本复杂的缺点而诞生的。为提高系统启动速度,大部分Linux发行版都已采用新的systemd替代System VUpstart,向下兼容System V

systemd: 是Linux系统中最新的初始化系统(init),为系统的启动和管理提供一套完整的解决方案。

Systemd取代了initd成为系统的第一个进程(Systemd 的PID是1),其他进程都是它的子进程。

主要特点包括:

  • 并行启动:服务可以并行启动,显著减少了启动时间。
  • 依赖管理:通过定义服务之间的依赖关系,确保服务按正确的顺序启动。
  • 状态检查:提供服务状态的实时检查,方便系统管理员监控。
  • 日志管理:集成了日志管理功能,方便查看系统和服务日志。

Linux-systemd-arch.png

关键组件:

  • systemd 服务:以 .service 文件的形式定义,位于 /etc/systemd/system/ 目录。
  • systemd 目标:定义系统的不同运行目标(如图形界面、命令行界面等)。
  • systemd 单元:包括服务、目标、套接字、设备等,是 systemd 管理的基本单位。

命令

Systemd是一组命令的集合,涉及系统管理的各方面。

系统级别

  • systemctl是管理系统的主命令
    重启系统:systemctl reboot; 关机:systemctl poweroff; 停止CPU: systemctl halt; 暂停系统: systemctl halt

  • systemd-analyze查看启动耗时。
    查看启动耗时: systemd-analyze; 查看每个服务的启动耗时: systemd-analyze blame; 显示瀑布状的启动过程流: systemd-analyze critical-chain; 显示指定服务的启动流: systemd-analyze critical-chain atd.service

  • hostnamectl管理主机信息
    查看: hostnamectl; 设置: hostnamectl set-hostname hex

  • localectl管理本地化设置
    查看: localectl; 设置: localectl set-locale LANG=en_GB.utf8

  • timedatectl管理时区设置
    查看: timedatectl; 设置timedatectl set-timezone America/New_York

  • loginctl查看当前登录的用户
    列出当前session: loginctl list-sessions; 列出当前登录用户: loginctl list-users; 显示指定用户信息: loginctl show-user user1

Unit

Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。

日志管理

Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf。

1
journactl 
分享

Hex
作者
Hex
CloudNative Developer

目录