zl程序教程

您现在的位置是:首页 >  系统

当前栏目

ubuntu系统中nginx启动脚本

Ubuntu系统Nginx 启动 脚本
2023-06-13 09:15:17 时间

复制代码代码如下:


#!/bin/sh
###BEGININITINFO
#Provides:         nginx
#Required-Start:   $remote_fs$syslog
#Required-Stop:    $remote_fs$syslog
#Default-Start:    2345
#Default-Stop:     016
#Short-Description:nginxinit.ddashscriptforUbuntuorother*nix.
#Description:      nginxinit.ddashscriptforUbuntuorother*nix.
###ENDINITINFO
#------------------------------------------------------------------------------
#nginx-thisDebianAlmquistshell(dash)script,startsandstopsthenginx
#        daemonforUbuntuandother*nixreleases.
#
#description: NginxisanHTTP(S)server,HTTP(S)reverse\
#              proxyandIMAP/POP3proxyserver. This\
#              scriptwillmanagetheinitiationofthe\
#              serverandit"sprocessstate.
#
#processname:nginx
#config:     /usr/local/nginx/conf/nginx.conf
#pidfile:    /usr/local/nginx/logs/nginx.pid
#Provides:   nginx
#
#Author: JasonGiedymin
#         <jason.giedyminATgmail.com>.
#
#Version:3.5.111-NOV-2013jason.giedyminATgmail.com
#Notes:nginxinit.ddashscriptforUbuntu.
#Testedwith:Ubuntu13.10,nginx-1.4.3
#
#Thisscript"sprojecthomeis:
#  http://github.com/JasonGiedymin/nginx-init-ubuntu
#
#------------------------------------------------------------------------------
#                              MITX11License
#------------------------------------------------------------------------------
#
#Copyright(c)2008-2013JasonGiedymin,http://jasongiedymin.com
#
#Permissionisherebygranted,freeofcharge,toanypersonobtaining
#acopyofthissoftwareandassociateddocumentationfiles(the
#"Software"),todealintheSoftwarewithoutrestriction,including
#withoutlimitationtherightstouse,copy,modify,merge,publish,
#distribute,sublicense,and/orsellcopiesoftheSoftware,andto
#permitpersonstowhomtheSoftwareisfurnishedtodoso,subjectto
#thefollowingconditions:
#
#Theabovecopyrightnoticeandthispermissionnoticeshallbe
#includedinallcopiesorsubstantialportionsoftheSoftware.
#
#THESOFTWAREISPROVIDED"ASIS",WITHOUTWARRANTYOFANYKIND,
#EXPRESSORIMPLIED,INCLUDINGBUTNOTLIMITEDTOTHEWARRANTIESOF
#MERCHANTABILITY,FITNESSFORAPARTICULARPURPOSEAND
#NONINFRINGEMENT.INNOEVENTSHALLTHEAUTHORSORCOPYRIGHTHOLDERSBE
#LIABLEFORANYCLAIM,DAMAGESOROTHERLIABILITY,WHETHERINANACTION
#OFCONTRACT,TORTOROTHERWISE,ARISINGFROM,OUTOFORINCONNECTION
#WITHTHESOFTWAREORTHEUSEOROTHERDEALINGSINTHESOFTWARE.
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
#                              Functions
#------------------------------------------------------------------------------
LSB_FUNC=/lib/lsb/init-functions

#Testthatinitfunctionsexists
test-r$LSB_FUNC||{
   echo"$0:Cannotfind$LSB_FUNC!Scriptexiting."1>&2
   exit5
}

.$LSB_FUNC

#------------------------------------------------------------------------------
#                              Consts
#------------------------------------------------------------------------------
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx

PS="nginx"
PIDNAME="nginx"                    #letsyoudo$PS-slave
PIDFILE=$PIDNAME.pid               #pidfile
PIDSPATH=/usr/local/nginx/logs     #defaultpidlocation,youshouldchangeit

DESCRIPTION="NginxServer..."

RUNAS=root                         #usertorunas

SCRIPT_OK=0                        #alaerrorcodes
SCRIPT_ERROR=1                     #alaerrorcodes
TRUE=1                             #boolean
FALSE=0                            #boolean

lockfile=/var/lock/subsys/nginx
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

#------------------------------------------------------------------------------
#                              SimpleTests
#------------------------------------------------------------------------------

#Testifnginxisafileandexecutable
test-x$DAEMON||{
   echo"$0:Youdon"thavepermissionstoexecutenginx."1>&2
   exit4
}

#Includenginxdefaultsifavailable
if[-f/etc/default/nginx];then
   ./etc/default/nginx
fi

#setexitcondition
#set-e

#------------------------------------------------------------------------------
#                              Functions
#------------------------------------------------------------------------------

setFilePerms(){
   if[-f$PIDSPATH/$PIDFILE];then
       chmod400$PIDSPATH/$PIDFILE
   fi
}

configtest(){
   $DAEMON-t-c$NGINX_CONF_FILE
}

getPSCount(){
   return`pgrep-f$PS|wc-l`
}

isRunning(){
   if[$1];then
       pidof_daemon$1
       PID=$?

       if[$PID-gt0];then
           return1
       else
           return0
       fi
   else
       pidof_daemon
       PID=$?

       if[$PID-gt0];then
           return1
       else
           return0
       fi
   fi
}

#courtesyofphp-fpm
wait_for_pid(){
   try=0

   whiletest$try-lt35;do
       case"$1"in
           "created")
           if[-f"$2"];then
               try=""
               break
           fi
           ;;

           "removed")
           if[!-f"$2"];then
               try=""
               break
           fi

       esac

       try=`expr$try+1`
       sleep1
   done
}

status(){
   isRunning
   isAlive=$?

   if["${isAlive}"-eq$TRUE];then
       log_warning_msg"$DESCRIPTIONfoundrunningwithprocesses: `pidof$PS`"
       rc=0
   else
       log_warning_msg"$DESCRIPTIONisNOTrunning."
       rc=3
   fi

   return
}

removePIDFile(){
   if[$1];then
       if[-f$1];then
           rm-f$1
       fi
   else
       #Dodefaultremoval
       if[-f$PIDSPATH/$PIDFILE];then
           rm-f$PIDSPATH/$PIDFILE
       fi
   fi
}

start(){
   log_daemon_msg"Starting$DESCRIPTION"

   isRunning
   isAlive=$?

   if["${isAlive}"-eq$TRUE];then
       log_end_msg$SCRIPT_ERROR
       rc=0
   else
       start-stop-daemon--start--quiet--chuid\
       $RUNAS--pidfile$PIDSPATH/$PIDFILE--exec$DAEMON\
       ---c$NGINX_CONF_FILE
       setFilePerms
       log_end_msg$SCRIPT_OK
       rc=0
   fi

   return
}

stop(){
   log_daemon_msg"Stopping$DESCRIPTION"

   isRunning
   isAlive=$?

   if["${isAlive}"-eq$TRUE];then
       start-stop-daemon--stop--quiet--pidfile$PIDSPATH/$PIDFILE

       wait_for_pid"removed"$PIDSPATH/$PIDFILE

       if[-n"$try"];then
           log_end_msg$SCRIPT_ERROR
           rc=0#lsbstates1,butunderstatusitis2(whichismoreprescriptive).Deferringtostandard.
       else
           removePIDFile
           log_end_msg$SCRIPT_OK
           rc=0
       fi
   else
       log_end_msg$SCRIPT_ERROR
       rc=7
   fi

   return
}

reload(){
   configtest||return$?

   log_daemon_msg"Reloading(viaHUP)$DESCRIPTION"

   isRunning

   if[$?-eq$TRUE];then
       kill-HUP`cat$PIDSPATH/$PIDFILE`
       log_end_msg$SCRIPT_OK
       rc=0
   else
       log_end_msg$SCRIPT_ERROR
       rc=7
   fi

   return
}

quietupgrade(){
   log_daemon_msg"PeformingQuietUpgrade$DESCRIPTION"

   isRunning
   isAlive=$?

   if["${isAlive}"-eq$TRUE];then
       kill-USR2`cat$PIDSPATH/$PIDFILE`
       kill-WINCH`cat$PIDSPATH/$PIDFILE.oldbin`

       isRunning
       isAlive=$?

       if["${isAlive}"-eq$TRUE];then
           kill-QUIT`cat$PIDSPATH/$PIDFILE.oldbin`
           wait_for_pid"removed"$PIDSPATH/$PIDFILE.oldbin
           removePIDFile$PIDSPATH/$PIDFILE.oldbin

           log_end_msg$SCRIPT_OK
           rc=0
       else
           log_end_msg$SCRIPT_ERROR

           log_daemon_msg"ERROR!Revertingbacktooriginal$DESCRIPTION"

           kill-HUP`cat$PIDSPATH/$PIDFILE`
           kill-TERM`cat$PIDSPATH/$PIDFILE.oldbin`
           kill-QUIT`cat$PIDSPATH/$PIDFILE.oldbin`

           wait_for_pid"removed"$PIDSPATH/$PIDFILE.oldbin
           removePIDFile$PIDSPATH/$PIDFILE.oldbin

           log_end_msg$SCRIPT_OK
           rc=0
       fi
   else
       log_end_msg$SCRIPT_ERROR
       rc=7
   fi

   return
}

terminate(){
   log_daemon_msg"Forceterminating(viaKILL)$DESCRIPTION"

   PIDS=`pidof$PS`||true

   [-e$PIDSPATH/$PIDFILE]&&PIDS2=`cat$PIDSPATH/$PIDFILE`

   foriin$PIDS;do
       if["$i"="$PIDS2"];then
           kill$i
           wait_for_pid"removed"$PIDSPATH/$PIDFILE
           removePIDFile
       fi
   done

   log_end_msg$SCRIPT_OK
   rc=0
}

destroy(){
   log_daemon_msg"Forceterminatingandmayincludeself(viaKILLALL)$DESCRIPTION"
   killall$PS-q>>/dev/null2>&1
   log_end_msg$SCRIPT_OK
   rc=0
}

pidof_daemon(){
   PIDS=`pidof$PS`||true

   [-e$PIDSPATH/$PIDFILE]&&PIDS2=`cat$PIDSPATH/$PIDFILE`

   foriin$PIDS;do
       if["$i"="$PIDS2"];then
           return1
       fi
   done

   return0
}

action="$1"
case"$1"in
   start)
       start

   stop)
       stop

   restart|force-reload)
       stop
       #if[$rc-ne0];then
       #    script_exit
       #fi
       sleep1
       start

   reload)
       $1

   status)
       status

   configtest)
       $1

   quietupgrade)
       $1

   terminate)
       $1

   destroy)
       $1

   *)
       FULLPATH=/etc/init.d/$PS
       echo"Usage:$FULLPATH{start|stop|restart|force-reload|status|configtest|quietupgrade|terminate|destroy}"
       echo"      The"destroy"commandshouldonlybeusedasalastresort."
       exit3

esac

exit$rc