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

简介: 一个运行起来的程序被为 进程,进程的英语是 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日志并进行多维度分析。
目录
相关文章
|
23天前
|
Linux
linux查看应用对应的端口
linux查看应用对应的端口
15 0
|
23天前
|
网络协议 安全 Linux
linux系统安全及应用——端口扫描
linux系统安全及应用——端口扫描
35 0
|
30天前
|
传感器 数据采集 存储
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用(一)
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用
75 0
|
30天前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
69 0
|
28天前
|
监控 Shell Linux
【Shell 命令集合 网络通讯 】Linux 分析串口的状态 statserial命令 使用指南
【Shell 命令集合 网络通讯 】Linux 分析串口的状态 statserial命令 使用指南
32 0
|
30天前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
31 1
|
30天前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
30 1
|
30天前
|
传感器 Linux 数据处理
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用(二)
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用
45 1
|
16天前
|
Prometheus 监控 数据可视化
linux分析方法与技巧
【4月更文挑战第3天】在Linux环境中,进行日志分析和系统性能分析的关键方法包括:使用`cat`, `less`, `tail`查看和过滤日志,`logrotate`管理日志文件,`rsyslog`或`syslog-ng`聚合日志,以及通过`top`, `mpstat`, `pidstat`, `free`, `iostat`, `netstat`, `strace`, `sar`, `dstat`等工具监控CPU、内存、磁盘I/O和网络。对于高级分析,可利用Brendan Gregg的性能工具,以及Grafana、Prometheus等可视化工具。
16 2
linux分析方法与技巧
|
18天前
|
Linux 测试技术 C语言
【Linux】应用编程之C语言文件操作
【Linux】应用编程之C语言文件操作