传统System V系统守护进程的管理(init进程)
传统的unix版本为system V版本,system V启动的第一个用户进程为init,所有的守护进程都是由init进程启动。 基本上System V init的管理机制有几个特色:
服务的启动、关闭与观察等方式:
init进程通过启动脚本启动相应的服务守护进程。
所有的服务启动脚本都存放在/etc/init.d/目录下,基本上所有的启动脚本都是bash shell script。 服务进程的启动、关闭、重启和状态观察等都是通过执行启动脚本来完成:
o 启动服务:/etc/init.d/daemon start服务启动的分类:
o 关闭服务:/etc/init.d/daemon stop
o 重启服务:/etc/init.d/daemon restart
o 观察服务状态:/etc/init.d/daemon status
init服务的分类中,依据服务是独立启动还是被超级守护进程(super daemon)管理而分为两大类:
o 独立启动模式(stand alone):服务独立启动,该服务直接常驻于内存中,提供本机或用户的服务行为,反应速度快。
o 超级守护进程(super daemon):由xinetd或inetd这两个超级守护进程提供socket对应或port对应的管理。 当没有用户要求某socket或port时, 所需要的服务是不会被启动的。若有用户要求时, xinetd进程会去唤醒相对应的服务进程。当该要求结束时,这个服务进程也会被结束掉。 好处是可以通过super daemon来进行服务的时程、联机需求等控制,缺点是唤醒服务需要一点时间的延迟。
服务的相依性问题:
服务是可能会有相依性的~例如,你要启动网络服务,但是系统没有网络, 那怎么可以唤醒网络服务呢? 如果你需要联机到外部取得认证服务器的联机,但该联机需要另一个 A 服务的需求,问题是,A 服务 没有启动, 因此,你的认证服务就不可能会成功启动的!这就是所谓的服务相依性问题。init 在管理员自己手动处理这些服务时,是没有办法协助相依服务的唤醒的!
执行等级的分类:
init进程是由linux内核在自身初始化完成后主动启动的第一个用户进程, init进程根据用户自定义的执行等级(runlevel)来启动不同的服务进程,以进入不同的操作环境。 基本上Linux提供7个执行等级,分别是 0, 1, 2...6 , 比较重要的是 1)单人维护模式、3)纯文本模式、5)文字加图形界面。 各个执行等级的启动脚本是通过/etc/rc.d/rc[0-6]/SXXdaemon符号链接到/etc/init.d/daemon , 符号链接文件名(SXXdaemon)的功能为: S为启动该服务, XX是数字,为启动的顺序。由于有 SXX 的设定,因此在开机时可以依序执行所有需要的服务, 同时也能解决相依服务的问题。这点与管理员自己手动处理不太一样就是了。
制定执行等级默认要启动的服务:
若要建立如上提到的SXXdaemon,不需要管理员手动建立连结档, 通过如下的指令可以来处理默认启动、预设不启动、观察预设启动否的行为:
o 设置开机启动: chkconfig daemon on执行等级的切换行为:
o 设置开机不启动: chkconfig daemon off
o 观察开机启动状态: chkconfig --list daemon
当你要从纯文本界面 (runlevel 3) 切换到图形界面 (runlevel 5), 不需要手动启动、关闭该执行等级的相关服务, 只要init 5即可切换,init进程会主动分析 /etc/rc.d/rc[35].d/ 这两个目录内的脚本, 然后启动转换runlevel中需要的服务,就完成整体的runlevel切换。
基本上 init 主要的功能都写在上头了,重要的指令包括 daemon 本身自己的脚本(/etc/init.d/daemon) 、 xinetd超级守护进程(super daemon)、设定预设开机启动的chkconfig,以及会影响到执行等级的init N 等。 虽然 CentOS 7 已经不使用 init 来管理服务了,不过因为考虑到某些脚本没有办法直接塞入 systemd 的处理,因此这些脚本还是被保留下来, 所以,我们在这里还是稍微介绍了一下。更多更详细的数据就请自己查询旧版本啰!如下就是一个可以参考的版本:
http://linux.vbird.org/linux_basic/0560daemons/0560daemons-centos5.php
initroot编辑整理,转载请注明www.initroot.com
100次点赞
100次阅读