前言
创建一个脚本,该脚本将改变nginx守护进程,让nginx以系统服务的形式启动,守护进程以后将由标准的命令控制且在系统启动时自动启动。
System V脚本
大多数基于linux的操作系统,使用的是System-V风格的init守护进程,启动进程由init进程管理。
守护进程遵循运行级别的原则(run level),系统运行级别表示当前计算机状态。
运行级别 | 状态 |
---|---|
0 | 系统停止 |
1 | 单用户模式(援救模式) |
2 | 多用户模式(不支持NFS) |
3 | 完整的多用户模式 |
4 | 没有使用 |
5 | 图形界面按模式 |
6 | 重启系统 |
关闭系统:
[root@localhost ~]# telinit 0 |
重启系统:
[root@localhost ~]# telinit 6 |
对于每一个运行级别的转换都会有一组服务被执行,系统停止时它的运行级别为0,一旦开启将转换到默认启动级别,系统默认启动级别是在etc/inittab
文件下配置的。
如何将一个服务安排到指定运行级别?
对于每一个运行级别,在/etc/rc.d
目录都包含要执行的脚本:
rco.d-rc6.d并不是真实的文件,他们的符号链接会指向/etc/init
目录下的脚本名,服务的启动脚本存储在/etc/init
目录下。
init脚本
init脚本是作为系统启动服务的脚本,脚本必须接收两个命令:start和stop,在系统启动时,如果该服务的启动计划级别正是系统运行级别,那么init守护进程将运行该脚本。
手动执行脚本:
[root@localhost rc.d]# service nginx start |
或系统未提供service命令:
[root@localhost rc.d]# /etc/init.d/nginx start |
为nginx建立init脚本
目录/etc/init.d
实际上是/etc/rc.d/init.d
的符号链接,因此在/etc/init.d
目录下新建文件nginx
(需要root权限):
[root@localhost rc.d]# vi /etc/init.d/nginx |
脚本内容如下:
安装nginx的init脚本
授予该脚本可执行权限:
[root@localhost rc.d]# chmod +x /etc/init.d/nginx |
然后就可以开启nginx:
[root@localhost init.d]# service nginx start |
或:
[root@localhost init.d]# /etc/init.d/nginx start |
最后一步是设置该脚本在适当的运行级别开机自启,这依赖于操作系统,主要针对广泛使用的两种操作系统家族:基于Debain的Debain/Ubuntu/other家族和基于Red hat的Red hat/Fedora/Centos/other家族。
基于Debian的发布
一条命令即可完成系统级别初始化脚本:
# update-rc.d -f nginx defaults |
该命令将在默认系统运行级别上建立链接,默认级别是指重启(reboot)和关闭(shutdown)级别,对于这两种级别,该脚本会执行stop参数,对于其他级别,则传递start参数而运行。
基于Red Hat的发布
添加服务:
# chkconfig –add nginx |
检验该服务的运行级别:
# chkconfig –list nginx |
使用ntsysv管理系统服务
ntsysv列出了所有能够计划在系统启动时执行的服务,可以开启它们,也可以禁用它们。
# yum install ntsysv -y |
使用ntsysv:
# ntsysv |