在原始的linux中,系统使用的是sysvinit启动方式,后来启动系统变为upstart,两者之间有不同的特点:
- sysvinit下所有的启动脚本都在/etc/init.d目录下,最后产生的进程名就是该目录下的文件名(去除文件名前面的S或K+启动或者停止序号),文件必须是可以执行的,执行顺序是按照字典书按需执行的。
- upstart中的所有的job配置文件(非脚本)在/etc/init目录下,都是以.conf结尾,同时不能有执行权限。最后产生的进程名也是和配置文件同名(去除后面的.conf后缀)。
在linux中,同一个脚本(在/etc/init.d目录下)不同的linux发行版下是不同的。
下面的图是centos中的nginx的启动脚本(centos是rhel系列,sysvinit方式)
在rhel系列中使用chkconfig进行服务的添加,查看启动列表等。一般情况下载shell脚本的头部需要加上三行,以便能够使用chkconfig添加服务的时候更方便,也能够使得脚本更便于阅读!
下图是ubuntu中nginx的shell脚本(upstart启动方式)
在linux中,为了实现软件的兼容(这里是upstart启动方式要兼容sysvinit方式),软件必须要符合LSB。
LSB
LSB是由众多的linux发行版的厂商共同参与的一个项目,在POSIX的基础上制定了一些列的标准,使得各种软件在个linux发行版上具有更好的移植性,各发行版具有更好的兼容性。
LSB脚本的要求:
- 必须提供start, stop, restart, force-reload, and status五种行为的定义。
- 必须返回正确的退出状态值
- 必须有文件运行时的依赖关系
- 可以有登陆消息
关于提供start, stop, restart, force-reload, and status,示例代码如下:
文件运行依赖关系的结构如下:
### BEGIN INIT INFO # Provides: scriptname # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5