可能有些朋友在使用Debian系的linux的时候是自己编译安装的nginx,然而自己编译安装的NGINX默认并没有在/etc/init.d/下生成管理脚本和添加自启动。如果我们需要自己设置自启动的话该怎么做呢?特别是在ubuntu 14.04的上,以往的chkconfig工具就不在支持了。这时候我们可以使用sysv-rc-conf这个工具快速方便的添加nginx的自启动项目。

首先我们要先安装sysv-rc-conf,我们可以直接用apt-get软件包管理器直接安装:

apt-get install sysv-rc-conf -y

等待一会,sysv-rc-conf就安装成功了。我们可以先用以下命令查看一下sysv-rc-conf的使用帮助:

sysv-rc-conf --help

显示启动项列表命令示例:

sysv-rc-conf --list #功能类似于 chkconfig --list
sysv-rc-conf --list httpd #功能类似于 chkconfig --list httpd

但是,我们自己编译安装的NGINX在/etc/init.d/下并没有管理脚本,所以我们现在还无法为NGINX设置自启动项,我们得先为NGINX在/etc/init.d/下创建一个启动脚本。这里我直接把军哥的lnmp一键包中的nginx管理脚本拿过来用了。不过我们自己编译安装的话得需要自己修改一点项目,首先我们先在/etc/init.d/下新建一个nginx的文件:

vim /etc/init.d/nginx

然后把下面的这些内容(或者点这里下载nginx管理脚本自行修改完之后传到/etc/init.d/中)贴进这个文件,记住要根据实际情况修改NGINX_BIN、CONFIGFILE和PIDFILE的目录位置:

#! /bin/sh
# chkconfig: 2345 55 25
# Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
# run 'update-rc.d -f nginx defaults', or use the appropriate command on your
# distro. For CentOS/Redhat run: 'chkconfig --add nginx'

### 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

# Author:   licess
# website:  http://lnmp.org

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=nginx
NGINX_BIN=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid

case "$1" in
    start)
        echo -n "Starting $NAME... "

        if netstat -tnpl | grep -q nginx;then
            echo "$NAME (pid `pidof $NAME`) already running."
            exit 1
        fi

        $NGINX_BIN -c $CONFIGFILE

        if [ "$?" != 0 ] ; then
            echo " failed"
            exit 1
        else
            echo " done"
        fi
        ;;

    stop)
        echo -n "Stoping $NAME... "

        if ! netstat -tnpl | grep -q nginx; then
            echo "$NAME is not running."
            exit 1
        fi

        $NGINX_BIN -s stop

        if [ "$?" != 0 ] ; then
            echo " failed. Use force-quit"
            exit 1
        else
            echo " done"
        fi
        ;;

    status)
        if netstat -tnpl | grep -q nginx; then
            PID=`pidof nginx`
            echo "$NAME (pid $PID) is running..."
        else
            echo "$NAME is stopped"
            exit 0
        fi
        ;;

    force-quit)
        echo -n "Terminating $NAME... "

        if ! netstat -tnpl | grep -q nginx; then
            echo "$NAME is not running."
            exit 1
        fi

        kill `pidof $NAME`

        if [ "$?" != 0 ] ; then
            echo " failed"
            exit 1
        else
            echo " done"
        fi
        ;;

    restart)
        $0 stop
        sleep 1
        $0 start
        ;;

    reload)
        echo -n "Reload service $NAME... "

        if netstat -tnpl | grep -q nginx; then
            $NGINX_BIN -s reload
            echo " done"
        else
            echo "$NAME is not running, can't reload."
            exit 1
        fi
        ;;

    configtest)
        echo -n "Test $NAME configure files... "

        $NGINX_BIN -t
        ;;

    *)
        echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}"
        exit 1
        ;;

esac

保存成功之后我们要对这个管理脚本设置一个权限:

chmod +x /etc/init.d/nginx

然而在有些VPS上这么设置之后还是无法执行的,那我们可以选择给他设置成777权限:

chmod 777 /etc/init.d/nginx

接下来我们可以看看这个脚本能否正确执行:

/etc/init.d/nginx restart #军哥的这个管理脚本支持的命令有start|stop|force-quit|restart|reload|status|configtest

如果没有错误能正确执行,那我们可以开始把他加入启动项了:

sysv-rc-conf --list #我们先查看一下list中有没有我们刚刚加进去的这个nginx管理脚本
sysv-rc-conf nginx on #然后用这个命令添加开机自启动

最后我们可以再确认一遍list有没有添加自启动成功,如果没问题我们就可以试试reboot重启之后看看效果了。