【Linux系统】关于守护进程

简介: 在某家公司工作期间,会使用常驻进程来作为需要保活运行的机制,用以维护消费者进程。但当时对于守护进程的理解还是不够深入,所以现在再把这块做个整理,并结合当时遇到的一个问题实例进行分析。注:下面内容都针对Linux操作系统。(Mac上的launchd与systemd作用相同,而且据说systemd的很多概念来自launched)。

一 背景

   在某家公司工作期间,会使用常驻进程来作为需要保活运行的机制,用以维护消费者进程。但当时对于守护进程的理解还是不够深入,所以现在再把这块做个整理,并结合当时遇到的一个问题实例进行分析。注:下面内容都针对Linux操作系统。(Mac上的launchd与systemd作用相同,而且据说systemd的很多概念来自launched)。

二 守护进程

2.1 init.d

历史上,Linux 的启动一直采用init进程来启动服务。例如:

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

/etc/init.d 是 /etc/rc.d/init.d 的软链接(soft link)。可以通过 ll 命令查看。

ls -ld /etc/init.d
lrwxrwxrwx. 1 root root 11 Aug 30 2015 /etc/init.d -> rc.d/init.d

/etc/init.d是用来放服务脚本的,当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。例如,某台测试机上的/etc/init.d目录下的内容如下:

2.2 systemd

2.2.1 init缺陷

init方法启动服务有两个缺陷:

1、启动时间长。init进程是串行执行,在一个进程启动完毕后,才能启动下一个进程

2、启动脚本复杂。init进程只负责执行启动脚本,脚本自身需要处理各种异常情况,这使得脚本内容过长且不易控制。

因此,就有了systemd的诞生。

2.2.2 systemd概述

   关于systemd可以查看freedesktop的这篇文献:systemd System and Service Manager

简单描述如下:systemd是Linux系统的一套基本构建块。它提供了一个系统和服务管理器,它作为PID 1运行并启动系统的其余部分。

system的命令位置和版本查看:

[xxx@wx-crm1 ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[xxx@wx-crm1 ~]$ which systemctl
/usr/bin/systemctl

Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix 哲学

相关争议内容链接:

Solidot | systemd作者抨击开源和Linux社区

Solidot | 抗议者创建Systemd分支Uselessd

2.2.3 systemd架构

2.2.4 systemd相关命令

systemctl是systemd的主命令,提供的主要功能和使用方式如下:

# 重启系统
$ sudo systemctl reboot
# 关闭系统,切断电源
$ sudo systemctl poweroff
# CPU停止工作
$ sudo systemctl halt
# 暂停系统
$ sudo systemctl suspend
# 让系统进入冬眠状态
$ sudo systemctl hibernate

除此之外,还有systemd-analyze,用语查看启动耗时;

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

hostnamectl命令用于查看当前主机的信息

localectl命令用于控制系统区域设置和键盘布局设置

timedatectl命令用于查看当前时区设置。

loginctl命令用于查看当前登录的用户,等等。

2.2.5 相关概念

1、单元

系统初始化需要做的事情较多,例如启动sshd,需要做很多配置工作。这个过程中的每一步将会被抽象为一个配置单元 unit。通常可以认为一个服务是一个配置单元,一个挂载点是一个配置单元,一个交换分区的配置是一个配置单元等。

通过这样的抽象,可以简化文件开发,例如一个mysql服务对应一个mysql.server文件,这种配置会非常简单,我们也不再需要编写和维护复杂的系统5脚本了。

2、依赖关系

systemd已经将大量的启动工作解除了依赖,使得他们可以并发启动,但还有有些任务之间存在依赖关系。systemd用配置单元定义文件中的关键字来描述配置单元之间的依赖关系。比如unit A依赖unit B,可以再unit B的定义中用"require A"来表示,这样systemd会保证优先启动A,然后再启动B。

3、事务

这里的事务,与数据库中事务的概念有所不同,是为了保证多个依赖的配置单元之间没有环形引用。比如有A,B,C三个单元,存在环形依赖关系:

如果存在这一的依赖,那么将无法启动任意一个服务。systemd会尝试通过依赖关系的强(required)和弱(want)的分别,通过去掉wants关键字指定的依赖来尝试打破循环,无法修复的话将会报错。

4、target和运行级别

systemd用target取代了运行级别的概念。systemd下目标和常见runlevelt的对应关系如下:

2.2.6 systemd的并发启动原理

主要有三种方式:解决 socket 依赖;解决D-Bus依赖,即desktop-bus依赖,是一种进程间通信机制;解决文件系统依赖。详细解释请查阅参考文献1.

三 小结

   本章描述systemd的起源及主要概念,并列举了一些参考文献。在下一篇文章,将介绍我们之前项目中的一种使用方式,和遇到的问题及解决过程。

参考文章

浅析 Linux 初始化 init 系统,第 3 部分 systemd

阮一峰,Systemd 入门教程:命令篇

Linux守护进程之systemd

相关实践学习
CentOS 8迁移Anolis OS 8
Anolis OS 8在做出差异性开发同时,在生态上和依赖管理上保持跟CentOS 8.x兼容,本文为您介绍如何通过AOMS迁移工具实现CentOS 8.x到Anolis OS 8的迁移。
目录
打赏
0
0
0
0
7
分享
相关文章
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
67 27
|
9天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
61 10
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
35 4
|
2月前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
105 24
Linux系统之whereis命令的基本使用
基于进程热点分析与系统资源优化的智能运维实践
智能服务器管理平台提供直观的可视化界面,助力高效操作系统管理。核心功能包括运维监控、智能助手和扩展插件管理,支持系统健康监控、故障诊断等,确保集群稳定运行。首次使用需激活服务并安装管控组件。平台还提供进程热点追踪、性能观测与优化建议,帮助开发人员快速识别和解决性能瓶颈。定期分析和多维度监控可提前预警潜在问题,保障系统长期稳定运行。
69 17
|
21天前
|
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
61 8
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
88 34
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
30天前
|
Linux:守护进程(进程组、会话和守护进程)
守护进程在 Linux 系统中扮演着重要角色,通过后台执行关键任务和服务,确保系统的稳定运行。理解进程组和会话的概念,是正确创建和管理守护进程的基础。使用现代的 `systemd` 或传统的 `init.d` 方法,可以有效地管理守护进程,提升系统的可靠性和可维护性。希望本文能帮助读者深入理解并掌握 Linux 守护进程的相关知识。
42 7

热门文章

最新文章