提示:本文写于 2013 年,文中涉及的 Linux 运行级别、chkconfig 以及 Nginx 服务脚本均基于当时的服务器环境,请结合文章发布时间阅读。
在 Linux 下编译使用 Nginx 的同学都知道,Linux 下编译安装的 Nginx 本身并没有自动启动的功能,而且关闭或者 reload 起来也比较麻烦。
比如关闭 Nginx,要么使用 killall 结束 Nginx 进程,要么进入 Nginx 的安装目录,通过 Nginx 自带的命令进行相关操作。
另外,有时候服务器因为一些问题需要重启,系统重启之后,Nginx 还需要手动运行,这样也比较麻烦。
下面来讲一下具体的办法。
最简单的开机自动启动方法
如果只是希望 Nginx 能够开机自动启动,有一个最简单的方法。
编辑:
/etc/rc.d/rc.local
在最后加入一行:
这样,系统启动之后就会自动运行 Nginx。
当然,如果需要关闭、重启或者 reload Nginx,就必须进入 Nginx 的安装目录,通过
来进行操作,也可以直接结束 Nginx 的主进程。
可以说,这样的操作还是比较麻烦的,特别是服务器中经常需要添加新网站或者测试 Nginx 参数的时候,每次都需要进入安装目录进行操作。
使用 Linux 服务管理 Nginx
这时候可以利用 Linux 的服务管理机制,手动添加一个服务,用来管理 Nginx 的守护进程。
首先来了解一下 Linux 的服务。
Linux 的服务脚本一般存放在:
/etc/rc.d/init.d/
目录下。
这些服务通常都是通过 Shell 脚本来实现的。
我们知道,Linux 有 0 到 6 一共 7 个运行级别,不同的运行级别下,启动的服务也各不相同。
在:
下面,可以看到:
这 7 个目录。
目录中分别存放各个运行级别下需要启动和关闭的服务。
进入我们比较常用的 rc3.d,可以发现其中的文件几乎全部都是指向:
../init.d/
目录下对应服务脚本的软链接。
其中还有一个 local 服务,是指向:
/etc/rc.d/rc.local
的。
到这里,其实就可以理解前面第一种开机自动启动 Nginx 方法的运行原理了:
系统通过 local 服务运行 rc.local 脚本,然后由 rc.local 执行 Nginx。
继续回到 rc3.d,可以发现这些服务文件虽然都是指向 ../init.d/ 下文件的软链接,但是它们的名称和 init.d 下的服务名称并不完全一样。
那么,这个命名规则又是怎样的呢?
首先,文件开头的 K 或者 S,代表服务是否在开机时启动:
- S 代表启动
- K 代表关闭
第二个是数字,代表服务启动或者关闭的顺序。
由于 Linux 下很多软件存在依赖关系,因此只有按照合理的顺序启动,才能保证程序正常运行。
最后就是服务名称,这个名称和:
/etc/rc.d/init.d/
下面对应的服务名称一致。
如何编写一个 Nginx 服务脚本?
那么,我们怎么去编写一个服务呢?
是不是编写完成之后,还需要手动进入对应的运行级别目录,创建服务软链接,再修改服务名称?
其实不用这么麻烦。
Linux 下的服务脚本有一些通用规则,只需要按照这些规则编写服务,系统就可以根据相关设置自动创建对应的服务链接。
下面来看一个简单的 Nginx 服务脚本:
#!/bin/bash
# chkconfig: 2345 10 90
# description: Nginx Service Script
case $1 in
start)
echo "Starting Nginx..."
/opt/nginx/sbin/nginx
;;
reload)
echo "Reloading Nginx..."
/opt/nginx/sbin/nginx -s reload
;;
stop)
echo "Stopping Nginx..."
/usr/bin/killall -s QUIT nginx
;;
restart)
echo "Restarting Nginx..."
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|reload|stop|restart}"
exit 222
;;
esac
exit 0
第一行:
#!/bin/bash
代表使用 Bash 来运行这个脚本。
第二行:
# chkconfig: 2345 10 90
是给 chkconfig 使用的配置说明。
其中:2345 代表这个服务在哪些运行级别下运行。
这里需要注意,启动顺序需要合理设置。
如果数字设置得太小,例如设置为 1,那么可能在一些网络服务还没有启动之前,Nginx 就已经开始启动,从而导致 Nginx 启动失败。
第三行:
# description: Nginx Service Script
用于描述这个服务。
从 case 开始的部分,就是 Shell 脚本本身的语法,这里就不再详细介绍了。
安装服务脚本
把这个文件命名为 nginx
然后复制到 /etc/rc.d/init.d/ 目录下。
接下来增加运行权限:
chmod+x /etc/rc.d/init.d/nginx
这时候就可以直接使用:
service nginx start
来启动 Nginx。同样也可以:
service nginx stop
service nginx reload
service nginx restart
来对 Nginx 进行相应的操作。
再进入:
这些目录,就可以发现系统已经自动创建了相应运行级别的服务软链接。
如果希望 Nginx 开机自动启动,只需要:
chkconfig nginx on
执行之后,再查看相应运行级别目录,就会发现服务链接的开头已经变成了:
这样,Nginx 就可以交给 Linux 的服务管理机制进行统一管理了。
评论0
欢迎分享你的看法,也欢迎补充不同的实践经验。