浅析Linux初始化init系统(1):sysvinit
作者:网络转载 发布时间:[ 2015/9/1 9:53:49 ] 推荐标签:操作系统
在这些目录下存放着很多不同的脚本。文件名以 S 开头的脚本是启动时应该运行的脚本,S 后面跟的数字定义了这些脚本的执行顺序。在/etc/rc.d/rcX.d 目录下的脚本其实都是一些软链接文件,真实的脚本文件存放在/etc/init.d 目录下。如下所示:
清单 1.rc5.d 目录下的脚本
[root@www ~]
# ll /etc/rc5.d/
lrwxrwxrwx 1 root root 16 Sep 4 2008 K02dhcdbd -> ../init.d/dhcdbd
....(中间省略)....
lrwxrwxrwx 1 root root 14 Sep 4 2008 K91capi -> ../init.d/capi
lrwxrwxrwx 1 root root 23 Sep 4 2008 S00microcode_ctl -> ../init.d/microcode_ctl
lrwxrwxrwx 1 root root 22 Sep 4 2008 S02lvm2-monitor -> ../init.d/lvm2-monitor
....(中间省略)....
lrwxrwxrwx 1 root root 17 Sep 4 2008 S10network -> ../init.d/network
....(中间省略)....
lrwxrwxrwx 1 root root 11 Sep 4 2008 S99local -> ../rc.local
lrwxrwxrwx 1 root root 16 Sep 4 2008 S99smartd -> ../init.d/smartd
....(底下省略)....
当所有的初始化脚本执行完毕。Sysvinit 运行/etc/rc.d/rc.local 脚本。
rc.local 是 Linux 留给用户进行个性化设置的地方。您可以把自己私人想设置和启动的东西放到这里,一台 Linux Server 的用户一般不止一个,所以才有这样的考虑。
Sysvinit 和系统关闭
Sysvinit 不仅需要负责初始化系统,还需要负责关闭系统。在系统关闭时,为了保证数据的一致性,需要小心地按顺序进行结束和清理工作。
比如应该先停止对文件系统有读写操作的服务,然后再 umount 文件系统。否则数据会丢失。
这种顺序的控制这也是依靠/etc/rc.d/rcX.d/目录下所有脚本的命名规则来控制的,在该目录下所有以 K 开头的脚本都将在关闭系统时调用,字母 K 之后的数字定义了它们的执行顺序。
这些脚本负责安全地停止服务或者其他的关闭工作。
Sysvinit 的管理和控制功能
此外,在系统启动之后,管理员还需要对已经启动的进程进行管理和控制。原始的 sysvinit 软件包包含了一系列的控制启动,运行和关闭所有其他程序的工具。
halt
停止系统。
init
这个是 sysvinit 本身的 init 进程实体,以 pid1 身份运行,是所有用户进程的父进程。主要的作用是在启动过程中使用/etc/inittab 文件创建进程。
killall5
是 SystemV 的 killall 命令。向除自己的会话(session)进程之外的其它进程发出信号,所以不能杀死当前使用的 shell。
last
回溯/var/log/wtmp 文件(或者-f 选项指定的文件),显示自从这个文件建立以来,所有用户的登录情况。
lastb
作用和 last 差不多,默认情况下使用/var/log/btmp 文件,显示所有失败登录企图。
mesg
控制其它用户对用户终端的访问。
pidof
找出程序的进程识别号(pid),输出到标准输出设备。
poweroff
等于 shutdown -h –p,或者 telinit 0。关闭系统并切断电源。
reboot
等于 shutdown –r 或者 telinit 6。重启系统。
runlevel
读取系统的登录记录文件(一般是/var/run/utmp)把以前和当前的系统运行级输出到标准输出设备。
shutdown
以一种安全的方式终止系统,所有正在登录的用户都会收到系统将要终止通知,并且不准新的登录。
sulogin
当系统进入单用户模式时,被 init 调用。当接收到启动加载程序传递的-b 选项时,init 也会调用 sulogin。
telinit
实际是 init 的一个连接,用来向 init 传送单字符参数和信号。
utmpdump
以一种用户友好的格式向标准输出设备显示/var/run/utmp 文件的内容。
wall
向所有有信息权限的登录用户发送消息。
不同的 Linux 发行版在这些 sysvinit 的基本工具基础上又开发了一些辅助工具用来简化 init 系统的管理工作。比如 RedHat 的 RHEL 在 sysvinit 的基础上开发了 initscripts 软件包,包含了大量的启动脚本 (如 rc.sysinit) ,还提供了 service,chkconfig 等命令行工具,甚至一套图形化界面来管理 init 系统。其他的 Linux 发行版也有各自的 initscript 或其他名字的 init 软件包来简化 sysvinit 的管理。
只要您理解了 sysvinit 的机制,在一个简的仅有 sysvinit 的系统下,您也可以直接调用脚本启动和停止服务,手动创建 inittab 和创建软连接来完成这些任务。因此理解 sysvinit 的基本原理和命令是重要的。您甚至也可以开发自己的一套管理工具。
Sysvinit 的小结
Sysvinit 的优点是概念简单。Service 开发人员只需要编写启动和停止脚本,概念非常清楚;将 service 添加/删除到某个 runlevel 时,只需要执行一些创建/删除软连接文件的基本操作;这些都不需要学习额外的知识或特殊的定义语法(UpStart 和 Systemd 都需要用户学习新的定义系统初始化行为的语言)。
其次,sysvinit 的另一个重要优点是确定的执行顺序:脚本严格按照启动数字的大小顺序执行,一个执行完毕再执行下一个,这非常有益于错误排查。UpStart 和 systemd 支持并发启动,导致没有人可以确定地了解具体的启动顺序,排错不易。
但是串行地执行脚本导致 sysvinit 运行效率较慢,在新的 IT 环境下,启动快慢成为一个重要问题。此外动态设备加载等 Linux 新特性也暴露出 sysvinit 设计的一些问题。针对这些问题,人们开始想办法改进 sysvinit,以便加快启动时间,并解决 sysvinit 自身的设计问题。
Upstart 是第一个被广泛应用的新一代 init 系统。我们在接下来的第二部分介绍 UpStart。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Linux下开源的DDR压力测试工具曝Linux恶意软件:让树莓派设备挖掘数字货币linux系统中不同颜色的文件夹及根目录介绍软件测试工程师必知必会Linux命令Linux下DNS服务器配置如何成为不可替代的Linux运维工程师?详解Linux进程(作业)的查看和杀死Linux 日志定时轮询流程详解比特币勒索病毒不只Windows系统有,Linux版的来了Linux日志定时轮询流程详解Linux iommu和vfio概念空间解构Linux系统如何低于TCP洪水攻击Linux无损调整分区大小Linux下防火墙配置实例Linux使用Jexus托管Asp.Net Core应用程序Linux中引号的那些事
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南