• 添加Nginx为系统服务(设置开机启动)


    在本节中,我们将创建一个脚本,将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−−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−−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的发行版本

    #!/bin/sh
    #
    # nginx - this script starts and stops the nginx daemon
    #
    # chkconfig:   - 85 15
    # description:  NGINX is an HTTP(S) server, HTTP(S) reverse 
    #               proxy and IMAP/POP3 proxy server
    # processname: nginx
    # config:      /etc/nginx/nginx.conf
    # config:      /etc/sysconfig/nginx
    # pidfile:     /var/run/nginx.pid
     
    # Source function library.
    . /etc/rc.d/init.d/functions
     
    # Source networking configuration.
    . /etc/sysconfig/network
     
    # Check that networking is up.
    [ "$NETWORKING" = "no" ] && exit 0
     
    nginx="/usr/sbin/nginx"
    prog=(basename(basenamenginx)
     
    NGINX_CONF_FILE="/etc/nginx/nginx.conf"
     
    [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
     
    lockfile=/var/lock/subsys/nginx
     
    make_dirs() {
       # make required directories
       user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=([^ ]*).*/1/g' -`
       if [ -z "`grep $user /etc/passwd`" ]; then
           useradd -M -s /bin/nologin $user
       fi
       options=`$nginx -V 2>&1 | grep 'configure arguments:'`
       for opt in $options; do
           if [ `echo $opt | grep '.*-temp-path'` ]; then
               value=`echo $opt | cut -d "=" -f 2`
               if [ ! -d "$value" ]; then
                   # echo "creating" $value
                   mkdir -p value && chown -Rvalue && chown -Ruser $value
               fi
           fi
       done
    }
     
    start() {
        [ -x $nginx ] || exit 5
        [ -f $NGINX_CONF_FILE ] || exit 6
        make_dirs
        echo -n "Starting"Startingprog: "
        daemon nginx−cnginx−cNGINX_CONF_FILE
        retval=$?
        echo
        [ retval -eq 0 ] && touchretval -eq 0 ] && touchlockfile
        return $retval
    }
     
    stop() {
        echo -n "Stopping"Stoppingprog: "
        killproc $prog -QUIT
        retval=$?
        echo
        [ retval -eq 0 ] && rm -fretval -eq 0 ] && rm -flockfile
        return $retval
    }
     
    restart() {
        configtest || return $?
        stop
        sleep 1
        start
    }
     
    reload() {
        configtest || return $?
        echo -n "Reloading"Reloadingprog: "
        killproc $nginx -HUP
        RETVAL=$?
        echo
    }
     
    force_reload() {
        restart
    }
     
    configtest() {
      nginx−t−cnginx−t−cNGINX_CONF_FILE
    }
     
    rh_status() {
        status $prog
    }
     
    rh_status_q() {
        rh_status >/dev/null 2>&1
    }
     
    case "$1" in
        start)
            rh_status_q && exit 0
            $1
            ;;
        stop)
            rh_status_q || exit 0
            $1
            ;;
        restart|configtest)
            $1
            ;;
        reload)
            rh_status_q || exit 7
            $1
            ;;
        force-reload)
            force_reload
            ;;
        status)
            rh_status
            ;;
        condrestart|try-restart)
            rh_status_q || exit 0
                ;;
        *)
            echo "Usage:"Usage:0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
            exit 2
    esac

    注意修改脚本中的路径。

    安装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

    转自:http://www.cnblogs.com/felixzh/p/6283809.html

  • 相关阅读:
    自定义CoordinatorLayout Behavior 隐藏Footer View
    开发错误记录10: Butterknife8.1.0 提示NullPointerException空指针
    要练习的项目
    2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)
    Android应用崩溃后异常捕获并重启并写入日志
    使用过的第三方框架汇总
    Eclipse导入 appcompat,design兼容包
    沉浸式模式与沉浸式状态栏
    开发错误记录9:Application无法跳转到Activity
    Android获取图片资源的4种方式
  • 原文地址:https://www.cnblogs.com/duhuo/p/4444936.html
Copyright © 2020-2023  润新知