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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一个运行起来的程序被为 进程,进程的英语是 process

进程

一个运行起来的程序被为 进程,进程的英语是 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命令来查看启动耗时

参考

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
Linux 调度
Linux 内核源代码情景分析(一)(下)
Linux 内核源代码情景分析(一)
62 1
|
12天前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
32 5
|
27天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
2月前
|
Docker 容器
14 response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file speci
14 response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file speci
39 1
|
3月前
|
存储 IDE Unix
Linux 内核源代码情景分析(四)(上)
Linux 内核源代码情景分析(四)
34 1
Linux 内核源代码情景分析(四)(上)
|
3月前
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
|
3月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
212 3
|
3月前
|
存储 Linux 块存储
Linux 内核源代码情景分析(三)(下)
Linux 内核源代码情景分析(三)
38 4
|
3月前
|
Linux C语言
深度探索Linux操作系统 —— 编译过程分析
深度探索Linux操作系统 —— 编译过程分析
28 2
|
3月前
|
存储 Unix Linux
Linux 内核源代码情景分析(四)(下)
Linux 内核源代码情景分析(四)
25 2
下一篇
无影云桌面