在项目中我们经常需要做的是,把我们写的应用封装成系统服务,那么它就会像一个守护程序一样,被操作系统所管理。目前linux有3种初始化系统,按出现的时间依次为init ,upstart和systemd。
3种系统简介
1. init
init即sysvinit,它是system v的成果,被推广到其他unix系统。常见的init 命令和/etc/init.d即属于它。
init的优点来自服务串行启动,可以保证脚本执行顺序,也方便调试和排错。但也因为串行启动导致系统启动时间很长,在linux被应用到移动端后这个缺点成了大问题。
2. upstart
upstart通过并行启动加快执行速度,但对于相互依赖的服务采用并发启动。它也支持硬件热插拔时的动态启动和卸载。
3.Systemd
systemd的并发更激进,因为对于相互依赖的服务它也同时启动。而且它的按需启动比upstart更优秀。
upstart取代了曾经辉煌的init,而systemd将要取代upstart
问题:
如何判断某个linux系统采用了哪种初始化系统?
初始化进程是kernel启动的第一个进程,其pid始终为1,因此我们可以使用stat /proc/1/exe可以查看:
#stat /proc/1/exe
File: `/proc/1/exe' -> `/sbin/init'
Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Device: 3h/3d Inode: 2608287784 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-12-26 15:57:12.206286001 +0800
Modify: 2019-12-25 15:56:57.194347686 +0800
Change: 2019-12-25 15:56:57.194347686 +0800
或者根据/usr/lib/systemd /usr/share/upstart /etc/init.d这3个目录是否存在来判断。但是由于systemd和upstart都向后兼容,因此一个系统中可能安装了多个初始化系统。
UpStart
UpStart 基于事件机制,采用事件驱动机制也带来了一些其它有益的变化,比如加快了系统启动时间。采用这种事件驱动的模式,upstart 完美地解决了即