作为一名优秀的工程师或者架构师,我们必须对Linux系统有非常良好的理解和掌握。这里介绍下令很多人糊涂的linux自启动。
目前linux有3种初始化系统,按出现的时间依次为init ,upstart和systemd。
3种系统简介
init
init即sysvinit,它是system v的成果,被推广到其他unix系统。常见的init 命令和/etc/init.d即属于它。
它的优点来自服务串行启动,可以保证脚本执行顺序,也方便调试和排错。但也因为串行启动导致系统启动时间很长,在linux被应用到移动端后这个缺点成了大问题。此外init需要编写复杂的启动脚本,你可以在init.d里找个文件看看upstart
upstart通过并行启动加快执行速度,但对于相互依赖的服务采用并发启动。它也支持硬件热插拔时的动态启动和卸载。Systemd
systemd的并发更激进,因为对于相互依赖的服务它也同时启动。而且它的按需启动比upstart更优秀。
upstart取代了曾经辉煌的init,而systemd将要取代upstart
两个核心问题
实际上我们最关心的两个问题是如何判断某个linux系统采用了哪种初始化系统,以及如何判断某个服务是由哪个系统初始化或者应该选择由哪个系统初始化判断初始化系统
初始化进程是kernel启动的第一个进程,其pid始终为1,因此我们使用stat /proc/1/exe可以查看
或者根据/usr/lib/systemd /usr/share/upstart /etc/init.d这3个目录是否存在来判断
注意由于systemd和upstart都向后兼容,因此一个系统中可能安装了多个初始化系统判断某个服务器由哪个系统初始化
其实init会将启动服务转交给upstart,而upstart转交给systemd