在本节中,我们将创建一个脚本,将Nginx守护进程转换为实际的系统服务。 这有两个作用:守护程序可以使用标准命令控制,更重要的是,它可以在系统启动时自动启动,并在系统关闭时停止。
System V scripts
大多数基于Linux的操作系统使用System-V风格的init守护进程。 换句话说,他们的启动过程由一个称为init的守护进程管理。
这个守护进程基于运行级别的原理运行,它代表计算机的状态。 这里是一个表表示各种运行级别:
运行级别 |
状态 |
0 |
系统关闭 |
1 |
单用户模式(救援模式) |
2 |
多用户模式,不支持NFS |
3 |
完全多用户模式 |
4 |
未使用 |
5 |
图形界面模式 |
6 |
系统重新启动 |
关于init脚本
init脚本(也称为服务启动脚本或甚至sysv脚本)是一个符合某种标准的shell脚本。 该脚本通过诸如开始,停止和其他等命令来控制守护进程应用程序。首先,当计算机启动时,init守护程序将使用start参数运行脚本。 另一种可能性是通过从shell手动执行脚本:
- [root@example.com ~]# service nginx start
或者如果您的系统没有service命令:
- [root@example.com ~]# /etc/init.d/nginx start
Nginx init脚本
/etc/init.d/nginx:
基于Debian的发行版本
- #! /bin/sh
-
- ### BEGIN INIT INFO
- # Provides: nginx
- # Required-Start: $all
- # Required-Stop: $all
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: starts the nginx web server
- # Description: starts nginx using start-stop-daemon
- ### END INIT INFO
-
- PATH=/opt/bin:/opt/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
- DAEMON=/opt/sbin/nginx
- NAME=nginx
- DESC=nginx
-
- test -x $DAEMON || exit 0
-
- # Include nginx defaults if available
- if [ -f /etc/default/nginx ] ; then
- . /etc/default/nginx
- fi
-
- set -e
-
- case "$1" in
- start)
- echo -n "Starting $DESC: "
- start-stop-daemon --start --quiet --pidfile /var/run/nginx.pid \
- --exec $DAEMON -- $DAEMON_OPTS
- echo "$NAME."
- ;;
- stop)
- echo -n "Stopping $DESC: "
- start-stop-daemon --stop --quiet --pidfile /var/run/nginx.pid \
- --exec $DAEMON
- echo "$NAME."
- ;;
- restart|force-reload)
- echo -n "Restarting $DESC: "
- start-stop-daemon --stop --quiet --pidfile \
- /var/run/nginx.pid --exec $DAEMON
- sleep 1
- start-stop-daemon --start --quiet --pidfile \
- /var/run/nginx.pid --exec $DAEMON -- $DAEMON_OPTS
- echo "$NAME."
- ;;
- reload)
- echo -n "Reloading $DESC configuration: "
- start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/nginx.pid \
- --exec $DAEMON
- echo "$NAME."
- ;;
- *)
- N=/etc/init.d/$NAME
- echo "Usage: $N {start|stop|restart|force-reload}" >&2
- exit 1
- ;;
- esac
-
- exit 0
基于Red Hat的发行版本
注意修改脚本中的路径。
安装Nginx init脚本
添加执行权限:
- [root@example.com ~]# chmod +x /etc/init.d/nginx
Debian-based发行版本:
- [root@example.com ~]# update-rc.d -f nginx defaults
Red Hat–based发行版本:
- [root@example.com ~]# chkconfig nginx on