【Linux 系统】关于守护进程
一 背景
常驻进程,其实就是守护进程。在某家公司工作期间,会使用它来作为需要保活运行的机制,用以维护消费者进程。但当时对于守护进程的理解还是不够深入,所以现在再把这块做个整理,并结合当时遇到的一个问题实例进行分析。注:下面内容都针对 Linux 操作系统。(Mac 上的 launchd 与 systemd 作用相同,而且据说 systemd 的很多概念来自 launched)。
二 守护进程
2.1 init.d
历史上,Linux 的启动一直采用 init 进程来启动服务。例如:
/etc/init.d 是 /etc/rc.d/init.d 的软链接(soft link)。可以通过 ll 命令查看。
/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 的命令位置和版本查看:
Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix 哲学。
相关争议内容链接:
Solidot | systemd作者抨击开源和Linux社区
Solidot | 抗议者创建Systemd分支Uselessd
2.2.3 systemd 架构
2.2.4 systemd 相关命令
systemctl 是 systemd 的主命令,提供的主要功能和使用方式如下:
除此之外,还有 systemd-analyze,用语查看启动耗时;
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 的起源及主要概念,并列举了一些参考文献。在下一篇文章,将介绍我们之前项目中的一种使用方式,和遇到的问题及解决过程。
参考文章
版权声明: 本文为 InfoQ 作者【程序员架构进阶】的原创文章。
原文链接:【http://xie.infoq.cn/article/3b9c315664cdb095dcc20a5e1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论